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

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

FIFO主题的消息顺序详情

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

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

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

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

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

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

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

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

SNSAmazon 为每条消息分配一个唯一的序列号,并将序列号传递给亚马逊SQS。

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