Amazon SQS でデッドレターキューを使用する - AWS SDK for C++

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

Amazon SQS でデッドレターキューを使用する

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

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

重要

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

前提条件

作業を始める前に「AWS SDK for C++ の開始方法」を読むことをお勧めします。

コード例をダウンロードし、「コード例の開始方法」の説明に従ってソリューションをビルドします。

例を実行するには、リクエストに使用するユーザープロファイルに、AWS のサービスとアクションに対する適切なアクセス許可が付与されている必要があります。詳細については、「AWS 認証情報の提供」を参照してください。

再処理ポリシーを作成する

再処理ポリシーは 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(); }

完全な例をご覧ください。

ソースキューに再処理ポリシーを設定する

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

含まれるもの:

#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; }

完全な例をご覧ください。

詳細