

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

# 在 Amazon SQS 中使用無效字母佇列
<a name="examples-sqs-dead-letter-queues"></a>

Amazon SQS 支援*無效字母佇列*。無效字母佇列是其他佇列可以為無法成功處理的訊息設定目標的佇列。您可以在無效字母佇列中擱置並隔離這類訊息，以確定無法成功處理訊息的原因。

若要建立無效字母佇列，您必須先建立*再驅動政策*，然後在佇列的屬性中設定政策。

**重要**  
無效字母佇列必須是與來源佇列相同的佇列類型 (FIFO 或標準）。它也必須使用與來源佇列相同的 AWS 帳戶 和 AWS 區域 建立。

## 先決條件
<a name="codeExamplePrereq"></a>

開始之前，建議您先閱讀[開始使用 適用於 C\+\+ 的 AWS SDK](getting-started.md)。

下載範例程式碼並建置解決方案，如中所述[程式碼範例入門](getting-started-code-examples.md)。

若要執行範例，您的程式碼用來提出請求的使用者描述檔必須具有 AWS （針對 服務和 動作） 的適當許可。如需詳細資訊，請參閱[提供 AWS 登入](credentials.md)資料。

## 建立再驅動政策
<a name="sqs-dead-letter-queue-create-redrive-policy"></a>

再驅動政策是在 JSON 中指定。若要建立它，您可以使用 隨附的 JSON 公用程式類別 適用於 C\+\+ 的 AWS SDK。

以下是建立再驅動政策的範例函數，方法是提供無效字母佇列的 ARN，以及在傳送至無效字母佇列之前可接收和處理訊息的次數上限。

 **包括** 

```
#include <aws/core/Aws.h>
#include <aws/core/utils/json/JsonSerializer.h>
```

 **Code** 

```
Aws::String MakeRedrivePolicy(const Aws::String &queueArn, int maxReceiveCount) {
    Aws::Utils::Json::JsonValue redrive_arn_entry;
    redrive_arn_entry.AsString(queueArn);

    Aws::Utils::Json::JsonValue max_msg_entry;
    max_msg_entry.AsInteger(maxReceiveCount);

    Aws::Utils::Json::JsonValue policy_map;
    policy_map.WithObject("deadLetterTargetArn", redrive_arn_entry);
    policy_map.WithObject("maxReceiveCount", max_msg_entry);

    return policy_map.View().WriteReadable();
}
```

請參閱[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/dead_letter_queue.cpp)。

## 在來源佇列上設定再驅動政策
<a name="sqs-dead-letter-queue-set-redrive-policy"></a>

若要完成無效字母佇列的設定，請使用 [SetQueueAttributesRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-sqs/html/class_aws_1_1_s_q_s_1_1_model_1_1_set_queue_attributes_request.html) 物件呼叫 SQSClient 類別`SetQueueAttributes`的成員函數，您已使用 JSON 再驅動政策設定 `RedrivePolicy` 屬性。

 **包括** 

```
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/SetQueueAttributesRequest.h>
#include <iostream>
```

 **Code** 

```
    Aws::SQS::Model::SetQueueAttributesRequest request;
    request.SetQueueUrl(srcQueueUrl);
    request.AddAttributes(
            Aws::SQS::Model::QueueAttributeName::RedrivePolicy,
            redrivePolicy);

    const Aws::SQS::Model::SetQueueAttributesOutcome outcome =
            sqsClient.SetQueueAttributes(request);
    if (outcome.IsSuccess()) {
        std::cout << "Successfully set dead letter queue for queue  " <<
                  srcQueueUrl << " to " << deadLetterQueueARN << std::endl;
    }
    else {
        std::cerr << "Error setting dead letter queue for queue " <<
                  srcQueueUrl << ": " << outcome.GetError().GetMessage() <<
                  std::endl;
    }
```

請參閱[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/dead_letter_queue.cpp)。

## 詳細資訊
<a name="more-info"></a>
+  《[Amazon Simple Queue Service 開發人員指南》中的使用 Amazon SQS 無效字母](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html)佇列
+  Amazon Simple Queue Service API 參考中的 [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html) 