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

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

发送、接收和删除 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。

收到后删除消息

收到消息并处理其内容后,通过向SqsClient'sdeleteMessage方法发送消息的接收句柄和队列 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;

代码

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

请查看上面的完整示例 GitHub。

更多信息