本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 FIFO 主题定义消息组上下文中的排序。有关更多信息,请参阅FIFO 主题的消息分组。