适用于 Java 的 AWS 开发工具包
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

发送、接收和删除 Amazon SQS 消息

重要

这是一个预览版,不建议用于生产环境。

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

发送消息

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

导入

import software.amazon.awssdk.services.sqs.SQSClient; import software.amazon.awssdk.services.sqs.model.SendMessageRequest;

代码

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

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

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

导入

import software.amazon.awssdk.services.sqs.SQSClient; import software.amazon.awssdk.services.sqs.model.SendMessageBatchRequest; import software.amazon.awssdk.services.sqs.model.SendMessageBatchRequestEntry;

代码

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 上的完整示例

检索消息

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

导入

import software.amazon.awssdk.services.sqs.SQSClient; import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest;

代码

ReceiveMessageRequest receiveMessageRequest = ReceiveMessageRequest.builder() .queueUrl(queueUrl) .maxNumberOfMessages(5) .build(); List<Message> messages= sqsClient.receiveMessage(receiveMessageRequest).messages();

收到后删除消息

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

导入

import software.amazon.awssdk.services.sqs.SQSClient; import software.amazon.awssdk.services.sqs.model.DeleteQueueRequest;

代码

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

请参阅 GitHub 上的完整示例

更多信息