发送、接收和删除 Amazon SQS 消息 - Amazon SDK for Java 1.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

我们宣布了即将推出 end-of-support 的 Amazon SDK for Java (v1)。建议您迁移到 Amazon SDK for Java v2。有关日期、其他详细信息以及如何迁移的信息,请参阅链接的公告。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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

本主题描述了如何发送、接收和删除 Amazon SQS 消息。始终使用 SQS 队列发送消息。

发送消息

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

导入

import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import com.amazonaws.services.sqs.model.SendMessageRequest;

代码

SendMessageRequest send_msg_request = new SendMessageRequest() .withQueueUrl(queueUrl) .withMessageBody("hello world") .withDelaySeconds(5); sqs.sendMessage(send_msg_request);

请参阅 GitHub 上的完整示例

一次性发送多条消息

您可以在一个请求中发送多条消息。要发送多条消息,可使用 AmazonSQS 客户端的 sendMessageBatch 方法,此方法采用 SendMessageBatchRequest,后者包含队列 URL 和要发送的消息列表(每条消息对应一个 SendMessageBatchRequestEntry)。您也可以为每条消息设置一个可选延迟值。

导入

import com.amazonaws.services.sqs.model.SendMessageBatchRequest; import com.amazonaws.services.sqs.model.SendMessageBatchRequestEntry;

代码

SendMessageBatchRequest send_batch_request = new SendMessageBatchRequest() .withQueueUrl(queueUrl) .withEntries( new SendMessageBatchRequestEntry( "msg_1", "Hello from message 1"), new SendMessageBatchRequestEntry( "msg_2", "Hello from message 2") .withDelaySeconds(10)); sqs.sendMessageBatch(send_batch_request);

请参阅 GitHub 上的完整示例

接收消息

可通过调用 AmazonSQS 客户端的 receiveMessage 方法并为其传递队列的 URL,来检索当前位于队列中的任何消息。消息将作为一系列 Message 对象返回。

导入

import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import com.amazonaws.services.sqs.model.AmazonSQSException; import com.amazonaws.services.sqs.model.SendMessageBatchRequest;

代码

List<Message> messages = sqs.receiveMessage(queueUrl).getMessages();

收到后删除消息

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

代码

for (Message m : messages) { sqs.deleteMessage(queueUrl, m.getReceiptHandle()); }

请参阅 GitHub 上的完整示例

更多信息