发送、接收和删除 Amazon Simple Queue Service 消息
消息是可由分布式组件发送和接收的一段数据。始终使用 SQS 队列发送消息。
以下示例中使用的 sqsClient 变量可以通过以下代码段创建。
SqsClient sqsClient = SqsClient.create();
使用静态 create() 方法创建 SqsClient 时,SDK 使用默认区域提供程序链配置区域,使用默认凭证提供程序链配置凭证。
发送消息
通过调用 SqsClient 客户端的 sendMessage 方法,将单个消息添加到 Amazon Simple Queue Service 队列。提供包含队列 URL
导入。
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
导入。
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
导入。
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 上的完整示例
更多信息
-
《Amazon Simple Queue Service Developer Guide》中的 How Amazon Simple Queue Service Queues Work
-
《Amazon Simple Queue Service API Reference》中的 SendMessage
-
《Amazon Simple Queue Service API Reference》中的 SendMessageBatch
-
《Amazon Simple Queue Service API Reference》中的 ReceiveMessage
-
《Amazon Simple Queue Service API Reference》中的 DeleteMessage