为订阅配置 Amazon SNS 死信队列
死信队列是一个 Amazon SQS 队列,Amazon SNS 订阅可以将其视为目标,用于存放无法成功传输给订阅用户的消息。由于客户端错误或服务器错误而无法传输的消息将保留在死信队列中,以进行进一步分析或重新处理。有关更多信息,请参阅 Amazon SNS 死信队列 和 Amazon SNS 消息传输重试。
本页显示如何使用 Amazon Web Services 管理控制台、Amazon 开发工具包、Amazon CLI 和 Amazon CloudFormation 为 Amazon SNS 订阅配置死信队列。
注意
对于 FIFO 主题,您可以将 Amazon SQS 队列用作 Amazon SNS 订阅的死信队列。FIFO 主题订阅使用 FIFO 队列,而标准主题订阅使用标准队列。
先决条件
在配置死信队列之前,请完成以下先决条件:
-
创建名为
MyEndpoint的 Amazon SQS 队列,以用作 Amazon SNS 订阅的终端节点。 -
(对于 Amazon CloudFormation 跳过) 为队列订阅主题。
-
创建另一个名为
MyDeadLetterQueue的 Amazon SQS 队列,以用作 Amazon SNS 订阅的死信队列。 -
要向 Amazon SNS 委托人授予对 Amazon SQS API 操作的访问权限,请为
MyDeadLetterQueue设置以下队列策略。
使用 Amazon Web Services 管理控制台 为 Amazon SNS 订阅配置死信队列
在开始本教程之前,请确保完成先决条件。
-
登录 Amazon SQS 控制台
。 -
创建 Amazon SQS 队列或使用现有队列,并在队列的 Details(详细信息)选项卡上记下队列的 ARN,例如:
arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue 登录 Amazon SNS 控制台
。 -
在导航面板中,选择订阅。
-
在 Subscriptions (订阅) 页面上,选择现有订阅,然后选择 Edit (编辑)。
-
在编辑
1234a567-bc89-012d-3e45-6fg7h890123i页面上,展开 Redrive policy (dead-letter queue)(重新驱动策略(死信队列))部分,然后执行以下操作:-
选择 Enabled (已启用)。
-
指定 Amazon SQS 队列的 ARN。
-
-
选择保存更改。
您的订阅将配置为使用死信队列。
要使用 Amazon 开发工具包为 Amazon SNS 订阅配置死信队列
在您运行此示例之前,请确保完成先决条件。
要使用 Amazon 开发工具包,您必须使用您的凭证对其进行配置。有关更多信息,请参阅《Amazon SDKs and Tools Reference Guide》中的 The shared config and credentials files。
以下代码示例演示了如何使用 SetSubscriptionAttributesRedrivePolicy。
使用 Amazon CLI 为 Amazon SNS 订阅配置死信队列
在开始本教程之前,请确保完成先决条件。
-
安装和配置 Amazon CLI。有关更多信息,请参阅 Amazon 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 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(下一步)。 -
在选项页面上,选择下一步。
-
在 Review 页面上,选择 Create。
Amazon CloudFormation 开始创建
MyDeadLetterQueue堆栈,并显示 CREATE_IN_PROGRESS 状态。在此过程完成后,Amazon CloudFormation 将显示 CREATE_COMPLETE 状态。