有关FIFO主题的 Amazon SNS 消息订购详情 - Amazon Simple Notification Service

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

有关FIFO主题的 Amazon SNS 消息订购详情

Amazon SNS FIFO 主题始终按照消息发布到该主题的确切顺序向已订阅的亚马逊SQS队列传送消息,而且只能发送一次。订阅了 Amazon SQS FIFO 队列后,队列的使用者将按照消息传送到队列的确切顺序接收消息,并且不会出现重复消息。但是,订阅了 Amazon SQS 标准队列后,该队列的使用者可能会多次收到乱序消息。这可以进一步将订阅者与发布者分开,从而在消息使用和成本优化方面为订阅者提供更大的灵活性,如基于 Amazon SNS FIFO 主题示例用例的下图所示。

亚马逊 SNSFIFO(First-In-First-Out)主题中的消息传递系统示例,重点介绍了如何以严格的顺序将消息始终如一地传递到亚马逊队列。SQS FIFO这与 Amazon SQS 标准队列的行为形成鲜明对比,在标准队列中,消息可能不按顺序送达,而且不止一次。该示例展示了三种不同的订阅者类型(分析功能、批发应用程序和零售应用程序),演示了每种订阅者是如何根据他们订阅的队列类型按严格顺序或按最大努力顺序接收消息的。

请注意,不存在订阅者的隐含排序。以下示例显示消息 m1 首先传输给批发订阅者,然后传输给零售订阅者,再传输给分析订阅者。消息 m2 首先传输给零售订阅者,然后传输给批发订阅者,最后传输给分析订阅者。尽管这两条消息按不同的顺序传送给订阅者,但会保留每个 Amazon 订SQSFIFO阅者的消息顺序。每个订阅者都与任何其他订阅者隔离感知。

Amazon SNS FIFO 主题和各种类型的订阅者(包括亚马逊SQSFIFO和标准队列)如何处理消息排序和传送的示例。它显示消息被发布到主题并传送到不同类型的队列,从而确保队列的传送顺序和标准FIFO队列的最大努力排序。此设置支持电子商务平台中的场景,在这些场景中,不同的组件需要按特定顺序可靠地传送消息才能进行精确处理。

如果 Amazon SQS 队列订阅者无法访问,则可能会失去同步。例如,假设批发应用程序队列所有者错误地更改了亚马逊SQS队列策略,从而阻止了亚马逊SNS服务主体向队列传送消息。在这种情况下,将价格更新传输到批发队列失败,而零售和分析队列的价格更新成功,从而导致订阅者不同步。当批发应用程序队列所有者更正其队列策略时,Amazon SNS 会恢复向订阅队列传送消息。在队列配置不正确时,发布到主题的任何消息都将被删除,除非对应的订阅已配置了死信队列

Amazon SNS FIFO 设置中的消息传递行为示例,其中消息通过亚马逊SQS队列发布给不同的订阅者类型(批发、零售和分析)。它重点介绍了队列策略配置错误对不同订阅者队列间消息传送同步的影响。该示例显示了批发订阅者的消息传输如何由于策略错误而失败,但零售和分析订阅者的消息传输却继续成功,这强调了正确的队列配置对于保持同步数据交付的重要性。这种情况凸显了FIFO主题在正常情况下确保按顺序交付和精确一次交付的能力以及配置错误的后果。

您可以让多个应用程序(或同一个应用程序中的多个线程)并行向一个SNSFIFO主题发布消息。当您执行此操作时,实际上是将消息排序委托给 Amazon SNS 服务。要确定已建立的消息序列,您可以检查序列号。

序列号是 Amazon 为每条消息SNS分配的非连续的大型数字。序列号的长度为 128 位,并且每个消息组的序列号会继续增加。序列号作为消息正文的一部分传递给已订阅的 Amazon SQS 队列。但是,如果您启用原始消息传送,则传送到亚马逊SQS队列的消息将不包含序列号或任何其他亚马逊SNS消息元数据。

多个 Lambda 函数的示例将消息发布到一个 Amazon SNSFIFO(先入先出)主题,然后由该主题将这些消息传送到亚马逊SQSFIFO队列,从而保持严格的消息处理顺序。此设置用于确保按照在应用程序的不同组件之间发送消息的确切顺序进行处理,序列号表示组中每条消息的顺序。这种类型的配置对于必须严格维护操作和消息顺序以确保一致性的应用程序至关重要。

Amazon SNS FIFO 主题定义了消息组上下文中的排序。有关更多信息,请参阅 针对FIFO主题的 Amazon SNS 消息分组