

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

本節提供[Amazon Simple Queue Service](https://docs.aws.amazon.com/sqs/)使用 適用於 Java 的 AWS SDK 2.x 進行程式設計的範例。

下列範例僅包含示範每個技術所需的程式碼。[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 的 Automatic Request Batching 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>

[SqsAsyncBatchManager](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html) 介面會實作自動請求批次處理 API。您可以用幾種方式建立管理員的執行個體。

### 使用 的預設組態 `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`執行個體會使用其建立來源`ExecutorService``SqsAsyncClient`執行個體的 。

### 使用 自訂組態 `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))`方法。軟體開發套件會緩衝請求，並在達到 `maxBatchSize`或 `sendRequestFrequency`值時以批次方式傳送請求。

下列範例顯示緊接另一個`sendMessage`請求的請求。在此情況下，軟體開發套件會以單一批次傳送兩個訊息。

```
// 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))方法變更批次中訊息的可見性逾時。軟體開發套件會緩衝請求，並在達到 `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))方法刪除批次中的訊息。軟體開發套件會緩衝請求，並在達到 `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))`方法時，批次管理工具會從其內部緩衝區擷取訊息，開發套件會在背景自動更新。

下列範例顯示如何呼叫 `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));
```

**注意**  
如果您`receiveMessage`使用包含下列任何參數`[ReceiveMessageRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/ReceiveMessageRequest.html)`的 呼叫 ，軟體開發套件會略過批次管理工具並傳送一般非同步`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)。


| 設定 | Description | 預設值 | 
| --- | --- | --- | 
| 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 開發人員指南](https://docs.aws.amazon.com//AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)。

本主題說明如何使用 建立、列出、刪除和取得 Amazon Simple Queue Service 佇列的 URL 適用於 Java 的 AWS SDK。

下列範例中使用的 `sqsClient` 變數可從下列程式碼片段建立。

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

當您`SqsClient`使用靜態`create()`方法建立 時，開發套件會使用[預設區域提供者鏈](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;
```

 **Code** 

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

            sqsClient.createQueue(createQueueRequest);
```

請參閱 GitHub 上的[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L52)。

## 列出佇列
<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())方法形式時，服務會傳回*所有佇列*，最多 1，000 個佇列。

您可以將佇列名稱字首提供給`[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;
```

 **Code** 

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

請參閱 GitHub 上的[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L79)。

## 取得佇列 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;
```

 **Code** 

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

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

## 刪除佇列
<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;
```

 **Code** 

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

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

## 其他資訊
<a name="more-information"></a>
+  Amazon Simple Queue Service API 參考中的 [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 訊息
<a name="examples-sqs-messages"></a>

訊息是資料片段，可透過分散式元件傳送和接收。訊息一律使用 [SQS 佇列](examples-sqs-message-queues.md)來傳送。

下列範例中使用的 `sqsClient` 變數可從下列程式碼片段建立。

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

當您`SqsClient`使用靜態`create()`方法建立 時，開發套件會使用[預設區域提供者鏈](region-selection.md#default-region-provider-chain)來設定區域，並使用預設登入資料[提供者鏈來設定登入資料](credentials-chain.md)。

## 傳送訊息
<a name="sqs-message-send"></a>

呼叫 SqsClient 用戶端`sendMessage`方法，將單一訊息新增至 Amazon Simple Queue Service 佇列。提供 [SendMessageRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/model/SendMessageRequest.html) 物件，其中包含佇列的 [URL](examples-sqs-message-queues.md#sqs-get-queue-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;
```

 **Code** 

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

 **Code** 

```
            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 上的[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L133)。

## 擷取訊息
<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;
```

 **Code** 

```
        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 上的[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L148)。

## 在收到訊息後刪除訊息
<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;
```

 **Code** 

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

請參閱 GitHub 上的[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/cf25559da654a7b74bec039c0ab9397dc5951dd4/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java#L187)。

## 詳細資訊
<a name="more-info"></a>
+  《 [Amazon Simple Queue Service 開發人員指南》中的佇列如何運作](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-basic-architecture.html) Amazon Simple Queue Service 
+  Amazon Simple Queue Service API 參考中的 [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) 