发送、接收和删除 Amazon Simple Queue Service 消息 - AWS SDK for Java 2.x

发送、接收和删除 Amazon Simple Queue Service 消息

消息是可由分布式组件发送和接收的一段数据。始终使用 SQS 队列发送消息。

以下示例中使用的 sqsClient 变量可以通过以下代码段创建。

SqsClient sqsClient = SqsClient.create();

使用静态 create() 方法创建 SqsClient 时,SDK 使用默认区域提供程序链配置区域,使用默认凭证提供程序链配置凭证。

发送消息

通过调用 SqsClient 客户端的 sendMessage 方法,将单个消息添加到 Amazon Simple Queue Service 队列。提供包含队列 URL、消息正文和可选延迟值(以秒为单位)的 SendMessageRequest 对象。

导入

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sqs.SqsClient; import software.amazon.awssdk.services.sqs.model.*; import java.util.List;

代码

sqsClient.sendMessage(SendMessageRequest.builder() .queueUrl(queueUrl) .messageBody("Hello world!") .delaySeconds(10) .build()); sqsClient.sendMessage(sendMsgRequest);

在一个请求中发送多条消息

通过使用 SqsClient sendMessageBatch 方法,在单个请求中发送多条消息。此方法采用了 SendMessageBatchRequest,后者包含队列 URL 和要发送的消息的列表。(每条消息都是一个 SendMessageBatchRequestEntry。) 您也可以通过设置消息上的延迟值来延迟发送特定消息。

导入

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sqs.SqsClient; import software.amazon.awssdk.services.sqs.model.*; import java.util.List;

代码

SendMessageBatchRequest sendMessageBatchRequest = SendMessageBatchRequest.builder() .queueUrl(queueUrl) .entries(SendMessageBatchRequestEntry.builder().id("id1").messageBody("Hello from msg 1").build(), SendMessageBatchRequestEntry.builder().id("id2").messageBody("msg 2").delaySeconds(10).build()) .build(); sqsClient.sendMessageBatch(sendMessageBatchRequest);

请参阅 GitHub 上的完整示例

检索消息

通过调用 SqsClient receiveMessage 方法,检索当前位于队列中的任何消息。此方法采用了 ReceiveMessageRequest,后者包含队列 URL。您也可以指定要返回的消息的最大数量。消息将作为一系列 Message 对象返回。

导入

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sqs.SqsClient; import software.amazon.awssdk.services.sqs.model.*; import java.util.List;

代码

try { ReceiveMessageRequest receiveMessageRequest = ReceiveMessageRequest.builder() .queueUrl(queueUrl) .maxNumberOfMessages(5) .build(); List<Message> messages = sqsClient.receiveMessage(receiveMessageRequest).messages(); return messages; } catch (SqsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return null;

请参阅 GitHub 上的完整示例

收到后删除消息

在收到消息并处理其内容后,可通过将消息的接收句柄和队列 URL 发送到 SqsClient's deleteMessage 方法,以便从队列中删除消息。

导入

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sqs.SqsClient; import software.amazon.awssdk.services.sqs.model.*; import java.util.List;

代码

try { for (Message message : messages) { DeleteMessageRequest deleteMessageRequest = DeleteMessageRequest.builder() .queueUrl(queueUrl) .receiptHandle(message.receiptHandle()) .build(); sqsClient.deleteMessage(deleteMessageRequest); }

请参阅 GitHub 上的完整示例

更多信息