

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SQS でデッドレターキューを使用する
<a name="examples-sqs-dead-letter-queues"></a>

Amazon SQS では、*デッドレターキュー*がサポートされます。デッドレターキューは、正常に処理できないメッセージの送信先として他のキューが使用できるキューです。これらのメッセージは、処理が成功しなかった理由を判断するためにデッドレターキューに分離できます。

デッドレターキューを作成するには、まず*再処理ポリシー*を作成し、次にキューの属性でそのポリシーを設定します。

**重要**  
デッドレターキューは、ソースキューと同じタイプのキュー (FIFO または標準) である必要があります。また、ソースキュー AWS リージョン と同じ AWS アカウント および を使用して作成する必要があります。

## 前提条件
<a name="codeExamplePrereq"></a>

作業を始める前に「[AWS SDK for C\+\+の開始方法](getting-started.md)」を読むことをお勧めします。

コード例をダウンロードし、「[コード例の開始方法](getting-started-code-examples.md)」の説明に従ってソリューションをビルドします。

例を実行するには、コードがリクエストを行うために使用するユーザープロファイルに適切なアクセス許可が必要です AWS ( サービスと アクション用）。詳細については、[AWS 「認証情報の提供](credentials.md)」を参照してください。

## 再処理ポリシーを作成する
<a name="sqs-dead-letter-queue-create-redrive-policy"></a>

再処理ポリシーは JSON 形式で指定します。その作成には、 AWS SDK for C\+\+で提供されている JSON ユーティリティクラスを使用できます。

ここで示しているのは、再処理ポリシーを作成する関数の一例です。この関数では、対象となるデッドレターキューの ARN と、メッセージが受信されても処理されなかった場合に、デッドレターキューへ送られるまでの最大試行回数を指定しています。

 **を含む** 

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

 **コード** 

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

デッドレターキューの設定を完了するには、SQSClient クラスの `SetQueueAttributes` メンバー関数の呼び出しで、JSON 形式の再処理ポリシーを `RedrivePolicy` 属性として設定した [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) オブジェクトを渡します。

 **を含む** 

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

 **コード** 

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