本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为订阅配置 Amazon SNS 死信队列
死信队列是一个 Amazon SQS 队列,Amazon SNS 订阅可以将其视为目标,用于存放无法成功传输给订阅用户的消息。由于客户端错误或服务器错误而无法传输的消息将保留在死信队列中,以进行进一步分析或重新处理。有关更多信息,请参阅Amazon SNS 死信队列 和Amazon SNS 消息传输重试。
本页介绍如何使用、 AWS 软件开发工具包 AWS Management Console AWS CLI、和 AWS CloudFormation 为 Amazon SNS 订阅配置死信队列。
注意
对于 FIFO 主题,您可以将 Amazon SQS 队列用作 Amazon SNS 订阅的死信队列。FIFO 主题订阅使用 FIFO 队列,而标准主题订阅使用标准队列。
先决条件
在配置死信队列之前,请完成以下先决条件:
-
创建名为
MyEndpoint
的 Amazon SQS 队列,以用作 Amazon SNS 订阅的终端节点。 -
(跳过 AWS CloudFormation)在队列中订阅主题。
-
创建另一个名为
MyDeadLetterQueue
的 Amazon SQS 队列,以用作 Amazon SNS 订阅的死信队列。 -
要向 Amazon SNS 委托人授予对 Amazon SQS API 操作的访问权限,请为
MyDeadLetterQueue
设置以下队列策略。{ "Statement": [{ "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "SQS:SendMessage", "Resource": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:MyTopic" } } }] }
要为 Amazon SNS 订阅配置死信队列,请使用 AWS Management Console
在开始本教程之前,请确保完成先决条件。
-
登录 Amazon SQS 控制台
。 -
创建 Amazon SQS 队列或使用现有队列,并在队列的 Details(详细信息)选项卡上记下队列的 ARN,例如:
arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue
登录 Amazon SNS 控制台
。 -
在导航面板中,选择订阅。
-
在 Subscriptions (订阅) 页面上,选择现有订阅,然后选择 Edit (编辑)。
-
在 Edit
1234a567-bc89-012d-3e45-6fg7h890123i
(编辑) 页面上,展开 Redrive policy (dead-letter queue) (重新驱动策略(死信队列)) 部分,然后执行以下操作:-
选择 Enabled (已启用)。
-
指定 Amazon SQS 队列的 ARN。
-
-
选择 Save changes(保存更改)。
您的订阅将配置为使用死信队列。
使用软件开发工具包为 Amazon SNS 订阅配置死信队列 AWS
在您运行此示例之前,请确保完成先决条件。
要使用 S AWS DK,必须使用您的凭据对其进行配置。有关更多信息,请参阅《工具参考指南》和《工具参考指南》中的共享配置AWS SDKs 和凭据文件。
以下代码示例演示如何使用 SetSubscriptionAttributesRedrivePolicy
。
要为 Amazon SNS 订阅配置死信队列,请使用 AWS CLI
在开始本教程之前,请确保完成先决条件。
-
安装和配置 AWS CLI。有关更多信息,请参阅 AWS Command Line Interface 用户指南。
-
使用以下命令。
aws sns set-subscription-attributes \ --subscription-arn arn:aws:sns:us-east-2:123456789012:MyEndpoint:1234a567-bc89-012d-3e45-6fg7h890123i --attribute-name RedrivePolicy --attribute-value "{\"deadLetterTargetArn\": \"arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue\"}"
使用为 Amazon SNS 订阅配置死信队列 AWS CloudFormation
在开始本教程之前,请确保完成先决条件。
-
将以下 JSON 代码复制到名为
MyDeadLetterQueue.json
的文件中。{ "Resources": { "mySubscription": { "Type" : "AWS::SNS::Subscription", "Properties" : { "Protocol": "sqs", "Endpoint": "arn:aws:sqs:us-east-2:123456789012:MyEndpoint", "TopicArn": "arn:aws:sns:us-east-2:123456789012:MyTopic", "RedrivePolicy": { "deadLetterTargetArn": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue" } } } } }
-
在 Select Template (选择模板) 页面上,选择 Upload a template to Amazon S3 (将模板上传到 Amazon S3),再选择您的
MyDeadLetterQueue.json
文件,然后选择 Next (下一步)。 -
在 Specify Details(指定详细信息)页面上,为 Stack Name(堆栈名称)输入
MyDeadLetterQueue
,然后选择 Next(下一步)。 -
在选项页面上,选择下一步。
-
在 Review 页面上,选择 Create 。
AWS CloudFormation 开始创建
MyDeadLetterQueue
堆栈并显示 CREATE_IN_ PROGRESS 状态。该过程完成后, AWS CloudFormation 将显示 “创建_完成” 状态。