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

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

FIFO 主题的消息排序详细信息

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


      在汽车零部件电子商务平台上严格排序的消息传递。

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


      每个订阅者严格排序的消息传递。

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


      批发队列订阅者暂时无法访问。

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

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


      Amazon SNS 为每条消息分配一个唯一的序列号,并将序列号传递给 Amazon SQS。

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