

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

# 使用 Amazon Simple Queue Service
<a name="examples-sqs"></a>

本部分提供使用适用于 Java 的 AWS SDK 2.x 对 [Amazon Simple Queue Service](https://docs.aws.amazon.com/sqs/) 进行编程的示例。

以下示例仅包含演示每种方法所需的代码。[完整的示例代码在 GitHub 上提供](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2)。您可以从中下载单个源文件，也可以将存储库复制到本地以获得所有示例，然后构建并运行它们。

**Topics**
+ [使用自动请求批处理](sqs-auto-batch.md)
+ [队列操作](examples-sqs-message-queues.md)
+ [消息操作](examples-sqs-messages.md)

# 将 Amazon SQS 的自动请求批处理与 AWS SDK for Java 2.x
<a name="sqs-auto-batch"></a>

Amazon SQS 的自动请求批处理 API 是一个高级库，提供了一种高效的方法来批处理和缓冲 SQS 操作的请求。通过使用批处理 API，您可以减少 SQS 的请求数量，从而提高吞吐量并更大限度地降低成本。

由于批处理 API 方法与 `[SqsAsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsAsyncClient.html)` 方法（`sendMessage`、`changeMessageVisibility`、`deleteMessage`、`receiveMessage`）相匹配，因此您可以将批处理 API 作为直接替代方案使用，只需做极少的代码修改。

本主题概述了如何配置和使用 Amazon SQS 的自动请求批处理 API。

## 检查先决条件
<a name="sqs-auto-batch-requirements"></a>

您需要使用适用于 Java 的 SDK 2.x 的版本 *2.28.0* 或更高版本才能访问批处理 API。您的 Maven `pom.xml` 应至少包含以下元素。

```
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>bom</artifactId>
            <version>2.28.231</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>sqs</artifactId>
    </dependency>
</dependencies>
```

1 [最新版本](https://central.sonatype.com/artifact/software.amazon.awssdk/bom)

## 创建批量管理器
<a name="sqs-auto-batch-create"></a>

自动请求批处理 API 由[SqsAsyncBatchManager](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html)接口实现。您可以通过几种方式创建管理器的实例。

### 使用 `SqsAsyncClient` 的默认配置
<a name="sqs-batch-manager-create-default"></a>

创建批处理管理器的最简单方法是在现有[SqsAsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsAsyncClient.html)实例上调用`batchManager`工厂方法。以下代码段演示了这种简单方法。

```
SqsAsyncClient asyncClient = SqsAsyncClient.create();
SqsAsyncBatchManager sqsAsyncBatchManager = asyncClient.batchManager();
```

当您使用这种方法时，`SqsAsyncBatchManager` 实例会使用 [覆盖 `SqsAsyncBatchManager` 的配置设置](#sqs-auto-batch-config-settings) 部分表格中显示的默认值。此外，`SqsAsyncBatchManager` 实例会使用其创建来源的 `SqsAsyncClient` 实例的 `ExecutorService`。

### 使用 `SqsAsyncBatchManager.Builder` 的自定义配置
<a name="sqs-batch-manager-create-custom"></a>

对于更高级的使用案例，您可以使用 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.Builder.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.Builder.html) 自定义批处理管理器。通过使用这种方法来创建 `SqsAsyncBatchManager` 实例，您可以微调批处理行为。以下代码段举例说明了如何使用生成器来自定义批处理行为。

```
SqsAsyncBatchManager batchManager = SqsAsyncBatchManager.builder()
    .client(SqsAsyncClient.create())
    .scheduledExecutor(Executors.newScheduledThreadPool(5))
    .overrideConfiguration(b -> b
        .receiveMessageMinWaitDuration(Duration.ofSeconds(10))
        .receiveMessageVisibilityTimeout(Duration.ofSeconds(1))
        .receiveMessageAttributeNames(Collections.singletonList("*"))
        .receiveMessageSystemAttributeNames(Collections.singletonList(MessageSystemAttributeName.ALL)))
    .build();
```

使用这种方法时，您可以调整 [覆盖 `SqsAsyncBatchManager` 的配置设置](#sqs-auto-batch-config-settings) 部分表格中显示的 `BatchOverrideConfiguration` 对象的设置。您也可以使用这种方法为批处理管理器提供自定义 [https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ScheduledExecutorService.html)。

## 发送消息
<a name="sqs-auto-batch-send"></a>

要使用批处理管理器发送消息，请使用 `[SqsAsyncBatchManager\$1sendMessage](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#sendMessage(software.amazon.awssdk.services.sqs.model.SendMessageRequest))` 方法。SDK 会缓冲请求，并在达到 `maxBatchSize` 或 `sendRequestFrequency` 值时批量发送请求。

以下示例展示了一个 `sendMessage` 请求后立即紧跟着另一个请求。在这种情况下，SDK 在单个批次中发送这两条消息。

```
// Sending the first message
CompletableFuture<SendMessageResponse> futureOne = 
    sqsAsyncBatchManager.sendMessage(r -> r.messageBody("One").queueUrl("queue"));

// Sending the second message
CompletableFuture<SendMessageResponse> futureTwo = 
    sqsAsyncBatchManager.sendMessage(r -> r.messageBody("Two").queueUrl("queue"));

// Waiting for both futures to complete and retrieving the responses
SendMessageResponse messageOne = futureOne.join();
SendMessageResponse messageTwo = futureTwo.join();
```

## 更改消息的可见性超时
<a name="sqs-auto-batch-change-vis"></a>

您可以使用 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#changeMessageVisibility(java.util.function.Consumer)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#changeMessageVisibility(java.util.function.Consumer)) 方法批量更改消息的可见性超时。SDK 会缓冲请求，并在达到 `maxBatchSize` 或 `sendRequestFrequency` 值时批量发送请求。

以下示例显示了如何调用 `changeMessageVisibility` 方法。

```
CompletableFuture<ChangeMessageVisibilityResponse> futureOne =
    sqsAsyncBatchManager.changeMessageVisibility(r -> 
        r.receiptHandle("receiptHandle")
         .queueUrl("queue"));
ChangeMessageVisibilityResponse response = futureOne.join();
```

## 删除消息
<a name="sqs-auto-batch-delete"></a>

您可以使用 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#deleteMessage(java.util.function.Consumer)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#deleteMessage(java.util.function.Consumer)) 方法批量删除消息。SDK 会缓冲请求，并在达到 `maxBatchSize` 或 `sendRequestFrequency` 值时批量发送请求。

以下示例说明了如何调用 `deleteMessage` 方法。

```
CompletableFuture<DeleteMessageResponse> futureOne = 
    sqsAsyncBatchManager.deleteMessage(r -> 
        r.receiptHandle("receiptHandle")
         .queueUrl("queue"));
DeleteMessageResponse response = futureOne.join();
```

## 接收消息
<a name="sqs-auto-batch-receive"></a>

### 使用默认设置
<a name="sqs-auto-batch-receive-default-settings"></a>

当您在应用程序中轮询 `[SqsAsyncBatchManager\$1receiveMessage](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html#receiveMessage(java.util.function.Consumer))` 方法时，批处理管理器会从其内部缓冲区获取消息，SDK 会在后台自动更新缓冲区。

以下示例显示了如何调用 `receiveMessage` 方法。

```
CompletableFuture<ReceiveMessageResponse> responseFuture = 
    sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl"));
```

### 使用自定义设置
<a name="sqs-auto-batch-receive-custom-settings"></a>

如果您想进一步自定义请求（例如设置自定义等待时间和指定要检索的消息数量），则可以按以下示例所示自定义请求。

```
CompletableFuture<ReceiveMessageResponse> response = 
    sqsAsyncBatchManager.receiveMessage(r -> 
        r.queueUrl("queueUrl")
         .waitTimeSeconds(5)
         .visibilityTimeout(20));
```

**注意**  
如果您使用包括以下任何参数的 `[ReceiveMessageRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/ReceiveMessageRequest.html)` 来调用 `receiveMessage`，则 SDK 会绕过批处理管理器并发送常规异步 `receiveMessage` 请求：  
`messageAttributeNames`
`messageSystemAttributeNames`
`messageSystemAttributeNamesWithStrings`
`overrideConfiguration`

## 覆盖 `SqsAsyncBatchManager` 的配置设置
<a name="sqs-auto-batch-config-settings"></a>

创建 `SqsAsyncBatchManager` 实例时，可以调整以下设置。[https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/BatchOverrideConfiguration.Builder.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/BatchOverrideConfiguration.Builder.html) 提供了以下设置列表。


| 设置 | 说明 | 默认 值 | 
| --- | --- | --- | 
| maxBatchSize | 每个 SendMessageBatchRequest、ChangeMessageVisibilityBatchRequest 或 DeleteMessageBatchRequest 每批次的最大请求数。最大值为 10。 | 10 | 
| sendRequestFrequency |  发送批次之前的时间，除非提前达到 `maxBatchSize`。较高的值可能会减少请求，但会增加延迟。  | 200 毫秒 | 
| receiveMessageVisibilityTimeout | 消息的可见性超时。如果未设置，则使用队列的默认值。 | 队列的默认值 | 
| receiveMessageMinWaitDuration | receiveMessage 请求的最短等待时间。避免设置为 0，以防浪费 CPU。 | 50 毫秒 | 
| receiveMessageSystemAttributeNames | receiveMessage 调用请求的[系统属性名称](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/MessageSystemAttributeName.html)列表。 | 无 | 
| receiveMessageAttributeNames | receiveMessage 调用请求的[属性名称](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-metadata.html#sqs-message-attributes)列表。 | 无 | 

# 处理 Amazon Simple Queue Service 消息队列
<a name="examples-sqs-message-queues"></a>

*消息队列*是用于在中可靠地发送消息的逻辑容器 Amazon Simple Queue Service。有两种类型的队列：*标准* 和*先进先出* (FIFO)。要了解有关队列以及这些类型之间的差异的更多信息，请参阅《[Amazon Simple Queue Service Developer Guide](https://docs.aws.amazon.com//AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)》。

本主题介绍如何使用创建、列出、删除队列和获取 Amazon Simple Queue Service 队列的 URL 适用于 Java 的 AWS SDK。

以下示例中使用的 `sqsClient` 变量可以通过以下代码段创建。

```
SqsClient sqsClient = SqsClient.create();
```

使用静态 `create()` 方法创建 `SqsClient` 时，SDK 使用[默认区域提供程序链](region-selection.md#default-region-provider-chain)配置区域，使用[默认凭证提供程序链](credentials-chain.md)配置凭证。

## 创建队列
<a name="sqs-create-queue"></a>

使用 `SqsClient’s` `createQueue` 方法，并提供一个描述队列参数的 `[CreateQueueRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/CreateQueueRequest.html)` 对象，如以下代码段所示。

 **导入** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.List;
```

 **代码** 

```
            CreateQueueRequest createQueueRequest = CreateQueueRequest.builder()
                .queueName(queueName)
                .build();

            sqsClient.createQueue(createQueueRequest);
```

请查看上[面的完整示例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L52) GitHub。

## 列出队列
<a name="sqs-list-queues"></a>

要列出您账户的 Amazon Simple Queue Service 队列，请使用`[ListQueuesRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/ListQueuesRequest.html)`对象调用`SqsClient’s``listQueues`方法。

当您使用不带任何参数的 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsClient.html#listQueues()](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsClient.html#listQueues()) 方法形式时，服务会返回*所有队列*（最多 1000 个）。

您可以向 `[ListQueuesRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/ListQueuesRequest.html)` 对象提供一个队列名称前缀，以将结果限制为与该前缀匹配的队列，如以下代码所示。

 **导入** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.List;
```

 **代码** 

```
        String prefix = "que";

        try {
            ListQueuesRequest listQueuesRequest = ListQueuesRequest.builder().queueNamePrefix(prefix).build();
            ListQueuesResponse listQueuesResponse = sqsClient.listQueues(listQueuesRequest);

            for (String url : listQueuesResponse.queueUrls()) {
                System.out.println(url);
            }

        } catch (SqsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
```

请查看上[面的完整示例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L79) GitHub。

## 获取队列的 URL
<a name="sqs-get-queue-url"></a>

以下代码显示如何通过调用带有 `[GetQueueUrlRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/GetQueueUrlRequest.html)` 对象的 `SqsClient’s` `getQueueUrl` 方法来获取队列的 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;
```

 **代码** 

```
            GetQueueUrlResponse getQueueUrlResponse =
                sqsClient.getQueueUrl(GetQueueUrlRequest.builder().queueName(queueName).build());
            String queueUrl = getQueueUrlResponse.queueUrl();
            return queueUrl;
```

请查看上[面的完整示例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/7486a1a092aa8e16a21698ef26f9d524fef62e55/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L70) GitHub。

## 删除队列
<a name="sqs-delete-queue"></a>

提供队列中指向 `[DeleteQueueRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/DeleteQueueRequest.html)` 对象的 [URL](#sqs-get-queue-url)。然后调用 `SqsClient’s` `deleteQueue` 方法来删除队列，如以下代码所示。

 **导入** 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.List;
```

 **代码** 

```
    public static void deleteSQSQueue(SqsClient sqsClient, String queueName) {

        try {

            GetQueueUrlRequest getQueueRequest = GetQueueUrlRequest.builder()
                    .queueName(queueName)
                    .build();

            String queueUrl = sqsClient.getQueueUrl(getQueueRequest).queueUrl();

            DeleteQueueRequest deleteQueueRequest = DeleteQueueRequest.builder()
                    .queueUrl(queueUrl)
                    .build();

            sqsClient.deleteQueue(deleteQueueRequest);

        } catch (SqsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
```

请查看上[面的完整示例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/6240df86c5f17eae1e23d1139d1435c7dc4b2a11/javav2/example_code/sqs/src/main/java/com/example/sqs/DeleteQueue.java#L48) GitHub。

## 更多信息
<a name="more-information"></a>
+  [CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)在 Amazon Simple Queue Service API 参考中
+  [GetQueueUrl](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html)在 Amazon Simple Queue Service API 参考中
+  [ListQueues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueues.html)在 Amazon Simple Queue Service API 参考中
+  [DeleteQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteQueue.html)在 Amazon Simple Queue Service API 参考中

# 发送、接收和删除 Amazon Simple Queue Service 消息
<a name="examples-sqs-messages"></a>

消息是可由分布式组件发送和接收的一段数据。始终使用 [SQS 队列](examples-sqs-message-queues.md)发送消息。

以下示例中使用的 `sqsClient` 变量可以通过以下代码段创建。

```
SqsClient sqsClient = SqsClient.create();
```

使用静态 `create()` 方法创建 `SqsClient` 时，SDK 使用[默认区域提供程序链](region-selection.md#default-region-provider-chain)配置区域，使用[默认凭证提供程序链](credentials-chain.md)配置凭证。

## 发送消息
<a name="sqs-message-send"></a>

通过调用 SqsClient 客户端`sendMessage`方法向 Amazon Simple Queue Service 队列中添加一条消息。提供一个包含队列的 [URL](examples-sqs-message-queues.md#sqs-get-queue-url)、消息正文和可选延迟值（以秒为单位）的[SendMessageRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/SendMessageRequest.html)对象。

 **导入** 

```
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);
```

## 在一个请求中发送多条消息
<a name="sqs-messages-send-multiple"></a>

通过使用 SqsClient `sendMessageBatch` 方法，在单个请求中发送多条消息。此方法采用[SendMessageBatchRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/SendMessageBatchRequest.html)包含队列 URL 和要发送的消息列表的。（每条消息都是[SendMessageBatchRequestEntry](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/SendMessageBatchRequestEntry.html)。） 您也可以通过设置消息上的延迟值来延迟发送特定消息。

 **导入** 

```
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);
```

请查看上[面的完整示例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L133) GitHub。

## 检索消息
<a name="sqs-messages-receive"></a>

通过调用 SqsClient `receiveMessage` 方法，检索当前位于队列中的任何消息。此方法采用[ReceiveMessageRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/ReceiveMessageRequest.html)包含队列 URL 的。您也可以指定要返回的消息的最大数量。消息将作为一系列 [Message](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/Message.html) 对象返回。

 **导入** 

```
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;
```

请查看上[面的完整示例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L148) GitHub。

## 收到后删除消息
<a name="sqs-messages-delete"></a>

在收到消息并处理其内容后，可通过将消息的接收句柄和队列 URL 发送到 `SqsClient's` [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsClient.html#deleteMessage(software.amazon.awssdk.services.sqs.model.DeleteMessageRequest)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsClient.html#deleteMessage(software.amazon.awssdk.services.sqs.model.DeleteMessageRequest)) 方法，以便从队列中删除消息。

 **导入** 

```
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);
            }
```

请查看上[面的完整示例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L187) GitHub。

## 更多信息
<a name="more-info"></a>
+  《 Amazon Simple Queue Service 开发者指南》中的@@ [Amazon Simple Queue Service 队列工作原](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-basic-architecture.html)理
+  [SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)在 Amazon Simple Queue Service API 参考中
+  [SendMessageBatch](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html)在 Amazon Simple Queue Service API 参考中
+  [ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)在 Amazon Simple Queue Service API 参考中
+  [DeleteMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html)在 Amazon Simple Queue Service API 参考中