为FIFO主题订阅者提供的 Amazon SNS 消息重播 - Amazon Simple Notification Service

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

为FIFO主题订阅者提供的 Amazon SNS 消息重播

Amazon re SNS play 允许主题订阅者从主题数据存储中检索存档的消息,然后将其重新传送(或重播)到已订阅的终端节点。创建订阅后即可立即重播消息。重播的消息与原始副本具有相同的内容、MessageIdTimestamp,还包含属性 Replayed,以帮助您识别这是一条重播的消息。要仅重播精选消息,可以在订阅中添加筛选策略。有关筛选消息的更多信息,请参阅筛选重播的消息

使用创建消息重播策略 AWS Management Console

使用此选项,通过 AWS Management Console创建新的重播策略。

  1. 登录 Amazon SNS 控制台

  2. 选择一个主题订阅或创建一个新的主题订阅。要了解有关创建订阅的更多信息,请参阅创建对 Amazon SNS 主题的订阅

  3. 要启动消息重播,请转到重播下拉列表并选择开始重播

  4. 重播时间范围模式中,进行以下选择:

    1. 选择重播开始日期和时间-选择要开始重播存档邮件的日期(YYYY/MM/DD格式)和时间(24 小时 hh: mm: ss 格式)。开始时间应晚于近似归档时间的开始时间。

    2. (可选)选择重播结束日期和时间-选择要停止重播存档邮件的日期(YYYY/MM/DD格式)和时间(24 小时 hh: mm: ss 格式)。

    3. 选择开始重播

  5. (可选)要停止消息重播,请转到订阅详细信息页面,然后从重播下拉列表中选择停止重播

  6. (可选)要使用监控此工作流程中的邮件重播指标 CloudWatch,请参阅使用 Amazon 监控消息重播指标 CloudWatch

查看和编辑消息重播策略

您可以从订阅详细信息页面执行以下操作:

  • 查看消息重播状态,重播状态字段将显示以下值:

    • 已完成 - 重播已成功重新传送所有消息,现在正在传送新发布的消息。

    • 进行中 – 重播当前正在重播所选消息。

    • 失败 – 重播无法完成。

    • 待处理 - 重播启动时的默认状态。

  • (可选)要修改消息重播策略,请转到订阅详细信息页面,然后从重播下拉列表中选择开始重播。开始某个重播将取代现有的重播。

使用向订阅添加重播政策 API

要重播存档的消息,请使用属性ReplayPolicyReplayPolicy可以与SubscribeSetSubscriptionAttributesAPI操作一起使用。此策略包含以下值:

  • StartingPoint(必需)- 表示从何处开始重播消息。

  • EndingPoint(可选)- 表示何时停止重播消息。如果省略 EndingPoint,则重播将继续,直到赶上当前时间。

  • PointType(必需)- 设置起点和终点的类型。目前,PointType 唯一支持的值是 Timestamp

例如,要从 2023 年 10 月 1 日下游故障中恢复并重新发送两小时内的所有消息,请使用SetSubscriptionAttributesAPI操作按ReplayPolicy如下方式进行设置:

{ "PointType":"Timestamp", "StartingPoint":"2023-10-01T10:00:00.000Z", "EndingPoint":"2023-10-01T12:00:00.000Z" }

要重播截至 2023 年 10 月 1 日发送到该主题的所有消息,并继续接收与您的主题有关的所有新发布的消息,请使用SetSubscriptionAttributesAPI操作ReplayPolicy对您的订阅进行设置,如下所示:

{ "PointType":"Timestamp", "StartingPoint":"2023-10-01T00:00:00.000Z" }

为了验证消息是否已重播,将在每条重播的消息中添加布尔属性 Replayed

使用向订阅添加重播政策 SDK

要使用 AWS SDK,必须使用您的凭据对其进行配置。有关更多信息,请参阅《工具参考指南》config和《工具参考指南》中的共享 AWS SDKs和credentials文件

以下代码示例显示了如何将订阅设置为ReplayPolicy在 2023 年 10 月 1 日的 2 小时内重新传送来自亚马逊SNSFIFO主题存档的消息。

// Specify the ARN of the Amazon SNS subscription to initiate the ReplayPolicy on. String subscriptionArn = "arn:aws:sns:us-east-2:123456789012:MyArchiveTopic.fifo:1d2a3e9d-7f2f-447c-88ae-03f1c68294da"; // Set the ReplayPolicy to replay messages from the topic's archive // for a 2 hour time period on October 1st 2023 between 10am and 12pm UTC. String replayPolicy = "{\"PointType\":\"Timestamp\",\"StartingPoint\":\"2023-10-01T10:00:00.000Z\",\"EndingPoint\":\"2023-10-01T12:00:00.000Z\"}"; // Set the ArchivePolicy for the Amazon SNS topic SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest() .withSubscriptionArn(subscriptionArn) .withAttributeName("ReplayPolicy") .withAttributeValue(replayPolicy); sns.setSubscriptionAttributes(request);

理解 EndingPoint

当您向 Amazon SNS 订ReplayPolicy阅应用时,该EndingPoint值是可选的。如果未EndingPoint提供,则重播将从指定的时间开始StartingPoint并持续到当前时间,包括处理任何新发布的消息。一旦赶上,订阅将作为常规订阅运行,在新消息发布时接收新消息。

如果指定EndingPoint了,则该服务将从StartingPoint上到向重播消息,EndingPoint然后停止。此操作实际上会暂停订阅。订阅暂停期间,新发布的消息将不会传送到已订阅的终端节点。

要恢复邮件传送,请在ReplayPolicy不提供消息的情况下应用新的 EndingPointStartingPoint,并将设置为继续接收消息的所需时间点。例如,要从之前的重播结束的地方恢复订阅,StartingPoint请将新的设置为先前提供的订阅EndingPoint

筛选重播的消息

Amazon SNS 消息筛选允许您控制亚马逊向您的订阅者终端SNS节点重播的消息。当消息筛选和消息存档都启用时,Amazon 会SNS首先从主题的数据存储中检索消息,然后将消息应用于订阅的数据存储中。FilterPolicy当存在匹配项时,消息将传送到订阅的端点,否则消息将被筛选掉。有关更多信息,请参阅 亚马逊SNS订阅筛选政策

使用 Amazon 监控消息重播指标 CloudWatch

您可以使用以下指标在 Amaz CloudWatch on 上监控重播消息。为了收到工作负载异常的通知并帮助避免影响,您可以根据这些指标配置 Amazon CloudWatch 警报。有关更多详细信息,请参阅在 Amazon 中记录和监控 SNS

指标 描述

NumberOfReplayedNotificationsDelivered

以 1 分钟的分辨率向订阅用户提供主题归档中重播的消息总数。

NumberOfReplayedNotificationsFailed

以 1 分钟的分辨率向订阅用户提供主题归档中未能传送的已重播消息的总数。