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

收到后删除消息

收到消息并处理其内容后,通过向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。

更多信息