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

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

FIFO主题的消息持久性

Amazon SNS FIFO 主题和 Amazon SQS 队列是持久的。这两种资源类型都以冗余方式跨多个可用区存储消息,并提供死信队列以处理异常情况。

在 Amazon 中SNS,当亚马逊SNS主题由于客户端或服务器端错误而无法访问已订阅的亚马逊SQS队列时,消息传递就会失败:

  • 当 Amazon SNS FIFO 主题包含过时的订阅元数据时,就会发生客户端错误。导致客户端错误的两个常见原因是 Amazon SQS 队列所有者执行以下操作之一:

    • 删除队列。

    • 更改队列策略时会阻止 Amazon SNS 服务主体向其发送消息。

    Amazon SNS 不会重试发送由于客户端错误而失败的消息。

  • 在以下情况下可能会发生服务器端错误:

    • Amazon SQS 服务不可用。

    • 亚马逊SQS无法处理来自亚马逊SNS服务的有效请求。

    当服务器端出现错误时,Amazon SNS FIFO 主题会在 23 天内重试失败的配送次数 100,015 次。有关更多信息,请参阅 Amazon SNS 消息传送重试次数

对于任何类型的错误,亚马逊SNS都可以将消息留给亚马逊SQS死信队列,这样数据就不会丢失。

在 Amazon 中SQS,当使用者应用程序无法接收、处理消息并将其从队列中删除时,消息处理就会失败。当最大数量的接收请求失败时,Amazon SQS 可以将消息留给死信队列,这样数据就不会丢失。

汽车零部件价格管理示例用例中,公司可以为每个亚马逊SNSFIFO主题订阅以及每个订阅的亚马逊队列分配一个亚马逊SQSSQS死信队列 (DLQ)。这可以保护公司免受任何价格更新损失。

配置 Amazon SQS 死信队列以确保消息不会丢失。

与亚马逊SNS订阅关联的死信队列必须是与订阅SQS队列相同类型的亚马逊队列。例如,亚马逊SNSFIFO订阅的亚马逊SQSFIFO队列必须将亚马逊SQSFIFO队列作为死信队列。同样,亚马逊SNSFIFO订阅的亚马逊SQS标准队列必须使用亚马逊SQS标准队列作为其死信队列。有关更多信息,请参阅 Amazon SNS 死信队列 () DLQs Comp Amazon ute 博客上的 “DLQs为亚马逊设计耐用的无服务器应用程序” SNSSQS, Amazon Lambda Amazon

为了延长持久性以帮助从下游故障中恢复,主题所有者还可以使用FIFO主题将消息存档长达 365 天。然后,主题订阅用户可以将这些消息重播到已订阅的端点,以恢复因下游应用程序故障而丢失的消息,或者复制现有应用程序的状态。有关更多信息,请参阅FIFO主题的消息存档和重播