为订阅配置 Amazon SNS 死信队列 - Amazon Simple Notification Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为订阅配置 Amazon SNS 死信队列

死信队列是 Amazon SNS 订阅可将其作为无法成功传输到订阅者的消息的目标的 Amazon SQS 队列。由于客户端错误或服务器错误而无法传输的消息将保留在死信队列中,以进行进一步分析或重新进行处理。有关更多信息,请参阅 Amazon SNS 死信队列 (DLQ)Amazon SNS 消息传输重试

本页面显示如何使用Amazon Web Services Management Console,Amazon SDK for Java,Amazon CLI, 和Amazon CloudFormation配置 Amazon SNS 订阅的死信队列。

Prerequisites

配置死信队列之前,请先完成以下先决条件:

  1. 创建 Amazon SNS 主题命名MyTopic

  2. 创建 Amazon SQS 队列命名MyEndpoint,用作 Amazon SNS 订阅的终端节点。

  3. (对于 Amazon CloudFormation 跳过) 为队列订阅主题

  4. 创建另一个 Amazon SQS 队列命名MyDeadLetterQueue中,用作 Amazon SNS 订阅的死信队列。

  5. 要向 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 订阅配置死信队列Amazon Web Services Management Console

开始本教程之前,请确保先完成先决条件

  1. 登录到Amazon SQS 控制台

  2. 创建 Amazon SQS 队列或使用现有队列,并在详细信息选项卡,例如:

    arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue
    注意

    对于FIFO 主题中,使用 Amazon SQS 队列用作 Amazon SNS 子占用的死信队列。

  3. 登录到Amazon SNS 控制台

  4. 在导航面板中,选择订阅

  5. Subscriptions (订阅) 页面上,选择现有订阅,然后选择 Edit (编辑)

  6. 在存储库的编辑随时随地页面上,展开重新驱动策略(死信队列)部分,然后执行以下操作:

    1. 选择 Enabled (已启用)

    2. 指定 Amazon SQS 队列的 ARN。

  7. 选择保存更改

    您的订阅将配置为使用死信队列。

使用为 Amazon SNS 订阅配置死信队列Amazon SDK for Java

开始本教程之前,请确保先完成先决条件

  1. 指定您的Amazon凭证。有关更多信息,请参阅 。设置Amazon凭证和发展区域中的Amazon SDK for Java 2.x开发人员指南

  2. 编写你的代码。有关更多信息,请参阅 。使用 SDK for Java 2.x

    有关创建 Amazon SQS 队列的更多信息,请参阅Amazon SQS 用Amazon SDK for Java中的Amazon Simple Queue Service 开发者指南

    以下代码摘录使用 Amazon SNS 订阅和 Amazon SQS 队列的 ARN 来设置RedrivePolicy请求参数属性。

    // Specify the ARN of the Amazon SNS subscription. String subscriptionArn = "arn:aws:sns:us-east-2:123456789012:MyEndpoint:1234a567-bc89-012d-3e45-6fg7h890123i"; // Specify the ARN of the Amazon SQS queue to use as a dead-letter queue. String redrivePolicy = "{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue\"}"; // Set the specified Amazon SQS queue as a dead-letter queue // of the specified Amazon SNS subscription. SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest() .withSubscriptionArn(subscriptionArn) .withAttributeName("RedrivePolicy") .withAttributeValue(redrivePolicy); sns.setSubscriptionAttributes(request);
  3. 编译并运行您的代码。

    Amazon SQS 队列设置为指定 Amazon SNS 订阅的死信队列。

使用为 Amazon SNS 订阅配置死信队列Amazon CLI

开始本教程之前,请确保先完成先决条件

  1. 安装和配置 Amazon CLI。有关更多信息,请参阅 Amazon Command Line Interface 用户指南

  2. 使用以下命令。

    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 订阅配置死信队列Amazon CloudFormation

开始本教程之前,请确保先完成先决条件

  1. 将以下 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" } } } } }
  2. 登录到 Amazon CloudFormation 控制台

  3. Select Template (选择模板) 页面上,选择 Upload a template to Amazon S3 (将模板上传到 Amazon S3),再选择您的 MyDeadLetterQueue.json 文件,然后选择 Next (下一步)

  4. 在存储库的指定详细信息页面上,输入MyDeadLetterQueue对于 来说为Stack Name,然后选择下一步

  5. Options (选项) 页面上,选择 Next (下一步)

  6. Review 页面上,选择 Create

    Amazon CloudFormation 开始创建 MyDeadLetterQueue 堆栈,并显示 CREATE_IN_PROGRESS 状态。在此过程完成后,Amazon CloudFormation 将显示 CREATE_COMPLETE 状态。