本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
有关FIFO主题的 Amazon SNS 消息订购详情
Amazon SNS FIFO 主题始终按照消息发布到该主题的确切顺序向已订阅的亚马逊SQS队列传送消息,而且只能发送一次。订阅了 Amazon SQS FIFO 队列后,队列的使用者将按照消息传送到队列的确切顺序接收消息,并且不会出现重复消息。但是,订阅了 Amazon SQS 标准队列后,该队列的使用者可能会多次收到乱序消息。这可以进一步将订阅者与发布者分开,从而在消息使用和成本优化方面为订阅者提供更大的灵活性,如基于 Amazon SNS FIFO 主题示例用例的下图所示。
请注意,不存在订阅者的隐含排序。以下示例显示消息 m1 首先传输给批发订阅者,然后传输给零售订阅者,再传输给分析订阅者。消息 m2 首先传输给零售订阅者,然后传输给批发订阅者,最后传输给分析订阅者。尽管这两条消息按不同的顺序传送给订阅者,但会保留每个 Amazon 订SQSFIFO阅者的消息顺序。每个订阅者都与任何其他订阅者隔离感知。
如果 Amazon SQS 队列订阅者无法访问,则可能会失去同步。例如,假设批发应用程序队列所有者错误地更改了亚马逊SQS队列策略,从而阻止了亚马逊SNS服务主体向队列传送消息。在这种情况下,将价格更新传输到批发队列失败,而零售和分析队列的价格更新成功,从而导致订阅者不同步。当批发应用程序队列所有者更正其队列策略时,Amazon SNS 会恢复向订阅队列传送消息。在队列配置不正确时,发布到主题的任何消息都将被删除,除非对应的订阅已配置了死信队列。
您可以让多个应用程序(或同一个应用程序中的多个线程)并行向一个SNSFIFO主题发布消息。当您执行此操作时,实际上是将消息排序委托给 Amazon SNS 服务。要确定已建立的消息序列,您可以检查序列号。
序列号是 Amazon 为每条消息SNS分配的非连续的大型数字。序列号的长度为 128 位,并且每个消息组的序列号会继续增加。序列号作为消息正文的一部分传递给已订阅的 Amazon SQS 队列。但是,如果您启用原始消息传送,则传送到亚马逊SQS队列的消息将不包含序列号或任何其他亚马逊SNS消息元数据。
Amazon SNS FIFO 主题定义了消息组上下文中的排序。有关更多信息,请参阅 针对FIFO主题的 Amazon SNS 消息分组。