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

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

FIFO 主题的消息持久性

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

在 Amazon SNS 中,当 Amazon SNS 主题由于客户端或服务器端错误无法访问订阅的 Amazon SQS 队列时,消息传输将失败。

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

    • 删除队列。

    • 以防止 Amazon SNS 服务委托人向其传输消息的方式更改队列策略。

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

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

    • Amazon SQS 服务不可用。

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

    在发生服务器端错误时,Amazon SNS FIFO 主题会最多重试失败的传输 100015 次(时间超过 23 天)。有关更多信息,请参阅Amazon SNS 消息传输重试

对于任何类型的错误,Amazon SNS 都可以将消息搁置到 Amazon SQS 死信队列中,以免数据丢失。

在 Amazon SQS 中,当使用者应用程序无法接收消息、处理消息并从队列中删除消息时,消息处理将失败。当接收请求的最大数量失败时,Amazon SQS 可以将消息搁置到死信队列中,以免数据丢失。

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


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

与 Amazon SNS 订阅关联的死信队列必须是与订阅队列类型相同的 Amazon SQS 队列。例如,Amazon SQS FIFO 队列的 Amazon SNS FIFO 订阅必须将 Amazon SQS FIFO 队列用作死信队列。同样,Amazon SQS 标准队列的 Amazon SNS FIFO 订阅必须使用 Amazon SQS 标准队列作为死信队列。有关更多信息,请参阅 Amazon 计算博客上的 Amazon SNS 死信队列 (DLQ)使用 DLQ 为 Amazon SNS、Amazon SQS、Amazon Lambda 设计持久的无服务器应用程序博客文章。

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