在 Amazon SQS 中使用無效字母佇列 - AWS SDK for Java 1.

AWS SDK for Java 1.x 已end-of-support於 2024 年 7 月 31 日進入維護模式,並將於二零二五年十二月三十一日推出。我們建議您移轉至,以繼續接收新功能、可用性改進和安全性更新。AWS SDK for Java 2.x

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

在 Amazon SQS 中使用無效字母佇列

Amazon SQS支援無效字母排列。無效字母佇列即為其他 (來源) 佇列,可以針對無法成功處理的訊息以進行作業。您可以在無效字母佇列中擱置並隔離這類訊息,以確定無法成功處理訊息的原因。

創建無效字母佇列

死信隊列的創建方式與常規隊列相同,但具有以下限制:

  • 死信隊列必須與源隊列與隊列類型相同(FIFO 或標準)。

  • 死信隊列必須使用相同的AWS 帳戶和區域作為來源佇列。

在這裏,我們創建兩個相同Amazon SQS隊列,其中一個將作為死信隊列:

匯入

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 以及在將消息發送到死信隊列之前可以接收和不處理的最大次數。

要為源隊列設置重新驅動策略,請調用 AmazonSQS 類的setQueueAttributes方法與SetQueueAttributesRequest對象,您已為其設置RedrivePolicy屬性與 JSON 重新驅動策略相結合。

匯入

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 上的完整範例

詳細資訊