为订阅配置 Amazon SNS 死信队列
死信队列是 Amazon SNS 订阅针对无法成功传输给订阅者的消息可以将其视为目标的一个 Amazon SQS 队列。由于客户端错误或服务器错误而无法传输的消息将保留在死信队列中,以进行进一步分析或重新处理。有关更多信息,请参阅 Amazon SNS 死信队列 (DLQ) 和 Amazon SNS 消息传输重试。
本页显示如何使用 AWS Management Console、AWS 开发工具包、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" } } }] }
使用 AWS Management Console 为 Amazon SNS 订阅配置死信队列
在开始本教程之前,请确保完成先决条件。
-
登录 Amazon SQS 控制台
。 -
创建 Amazon SQS 队列或使用现有队列,并在队列的 Details(详细信息)选项卡上记下队列的 ARN,例如:
arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue
登录 Amazon SNS 控制台
。 -
在导航面板中,选择 Subscriptions(订阅)。
-
在 Subscriptions (订阅) 页面上,选择现有订阅,然后选择 Edit (编辑)。
-
在编辑
1234a567-bc89-012d-3e45-6fg7h890123i
页面上,展开 Redrive policy (dead-letter queue)(重新驱动策略(死信队列))部分,然后执行以下操作:-
选择 Enabled (已启用)。
-
指定 Amazon SQS 队列的 ARN。
-
-
选择 Save changes(保存更改)。
您的订阅将配置为使用死信队列。
要使用 AWS 开发工具包为 Amazon SNS 订阅配置死信队列
在您运行此示例之前,请确保完成先决条件。
要使用 AWS 开发工具包,您必须使用您的凭证对其进行配置。有关更多信息,请参阅 AWS 开发工具包和工具参考指南中的共享配置和凭证文件。
以下代码示例演示如何将 Amazon SQS 队列设置为 Amazon SNS 订阅的死信队列。
使用 AWS CLI 为 Amazon SNS 订阅配置死信队列
在开始本教程之前,请确保完成先决条件。
-
安装和配置 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\"}"
要使用 AWS CloudFormation 为 Amazon SNS 订阅配置死信队列
在开始本教程之前,请确保完成先决条件。
-
将以下 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(下一步)。 -
在 Options (选项) 页面上,选择 Next (下一步)。
-
在 Review 页面上,选择 Create 。
AWS CloudFormation 开始创建
MyDeadLetterQueue
堆栈,并显示 CREATE_IN_PROGRESS 状态。在此过程完成后,AWS CloudFormation 将显示 CREATE_COMPLETE 状态。