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

我們宣布了即將推 end-of-support 出的 AWS SDK for Java (v1)。我們建議您移轉至 AWS SDK for Java v2。有關日期,其他詳細信息以及如何遷移的信息,請參閱鏈接的公告。

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

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

詳細資訊