FIFO 主题订阅用户的消息重播 - Amazon Simple Notification Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

FIFO 主题订阅用户的消息重播

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

使用 Amazon Web Services Management Console创建消息重播策略

使用此选项,通过 Amazon Web Services 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 可以与 SubscribeSetSubscriptionAttributes API 操作一起使用。此策略包含以下值:

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

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

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

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

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

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

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

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

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

要使用 Amazon 开发工具包,您必须使用您的凭证对其进行配置。有关更多信息,请参阅《Amazon SDK 和工具参考指南》中的共享 configcredentials 文件

以下代码示例显示了如何对订阅设置 ReplayPolicy,以便从 Amazon SNS FIFO 主题的归档中重新传送 2023 年 10 月 1 日 2 小时时段内的消息。

// 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);

筛选重播的消息

Amazon SNS 消息筛选可让您控制 Amazon SNS 向您的订阅用户端点重播的消息。当消息筛选和消息归档都已启用时,Amazon SNS 会首先从主题的数据存储中检索消息,然后根据订阅的 FilterPolicy 应用消息。当存在匹配项时,消息将传送到订阅的端点,否则消息将被筛选掉。有关更多信息,请参阅Amazon SNS 订阅筛选策略

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

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

指标 描述

NumberOfReplayedNotificationsDelivered

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

NumberOfReplayedNotificationsFailed

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