AWS SDK for Java 1.x は 2024 年 7 月 31 日にメンテナンスモードに入り、2025 年 12 月 31 日にend-of-support
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
でのデッドレターキューの使用 Amazon SQS
Amazon SQS はデッドレターキューをサポートしています。デッドレターキューは、正常に処理できないメッセージの送信先として他の (送信元) キューが使用できるキューです。これらのメッセージは、処理が成功しなかった理由を判断するためにデッドレターキューに分離できます。
デッドレターキューの作成
デッドレターキューは、通常のキューと同じ方法で作成されますが、次の制限があります。
-
デッドレターキューは、ソースキューと同じタイプのキュー (FIFO または標準) である必要があります。
-
デッドレターキューは、ソースキューと同じ AWS アカウント およびリージョンを使用して作成する必要があります。
ここでは、2 つの同一の Amazon SQS キューを作成します。そのうちの 1 つはデッドレターキューとして機能します。
インポート
import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import com.amazonaws.services.sqs.model.AmazonSQSException;
Code
final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); // Create source queue try { sqs.createQueue(src_queue_name); } catch (AmazonSQSException e) { if (!e.getErrorCode().equals("QueueAlreadyExists")) { throw e; } } // Create dead-letter queue try { sqs.createQueue(dl_queue_name); } catch (AmazonSQSException e) { if (!e.getErrorCode().equals("QueueAlreadyExists")) { throw e; } }
GitHub
ソースキューに対するデッドレターキューの指定
デッドレターキューを指定するには、まず再処理ポリシーを作成し、次にキューの属性でそのポリシーを設定します。再処理ポリシーは JSON で指定され、デッドレターキューの ARN、およびメッセージがデッドレターキューに送信される前に受信できて処理できない最大回数を指定します。
ソースキューに再処理ポリシーを設定するには、JSON 再処理ポリシーで RedrivePolicy
属性を設定した SetQueueAttributesRequest オブジェクトを使用して、AmazonSQS クラスの setQueueAttributes
メソッドを呼び出します。
インポート
import com.amazonaws.services.sqs.model.GetQueueAttributesRequest; import com.amazonaws.services.sqs.model.GetQueueAttributesResult; import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;
Code
String dl_queue_url = sqs.getQueueUrl(dl_queue_name) .getQueueUrl(); GetQueueAttributesResult queue_attrs = sqs.getQueueAttributes( new GetQueueAttributesRequest(dl_queue_url) .withAttributeNames("QueueArn")); String dl_queue_arn = queue_attrs.getAttributes().get("QueueArn"); // Set dead letter queue with redrive policy on source queue. String src_queue_url = sqs.getQueueUrl(src_queue_name) .getQueueUrl(); SetQueueAttributesRequest request = new SetQueueAttributesRequest() .withQueueUrl(src_queue_url) .addAttributesEntry("RedrivePolicy", "{\"maxReceiveCount\":\"5\", \"deadLetterTargetArn\":\"" + dl_queue_arn + "\"}"); sqs.setQueueAttributes(request);
GitHub
詳細情報
-
Amazon SQS デベロッパーガイドのAmazon SQS 「デッドレターキューの使用」
-
Amazon SQS API リファレンスの SetQueueAttributes