【发布时间】:2014-03-11 10:48:04
【问题描述】:
来自 Amazon SQS 常见问题页面:
Amazon SQS 不保证对 Amazon 中消息的 FIFO 访问 SQS 队列,主要是因为 Amazon 的分布式特性 质量保证。如果您需要特定的消息排序,您应该设计您的 应用程序来处理它。
我的问题是 - 如何以这种方式设计应用程序?
【问题讨论】:
标签: amazon-web-services fifo amazon-sqs
来自 Amazon SQS 常见问题页面:
Amazon SQS 不保证对 Amazon 中消息的 FIFO 访问 SQS 队列,主要是因为 Amazon 的分布式特性 质量保证。如果您需要特定的消息排序,您应该设计您的 应用程序来处理它。
我的问题是 - 如何以这种方式设计应用程序?
【问题讨论】:
标签: amazon-web-services fifo amazon-sqs
您可以在发送消息时设置消息序列计数器。在接收端,如果顺序正确,您可以继续处理消息。如果出现乱序消息,则等待正确的消息到来(直到将消息存储在按序列号排序的列表中),然后处理正确序列的消息和介于两者之间的其他消息。
【讨论】:
Amazon SQS 刚刚获得FIFO Queues with Exactly-Once Processing & Deduplication:
今天,我们通过支持使 SQS 更加强大和灵活 用于 FIFO(先进先出)队列。 我们正在推出这个新的 现在两个地区的队列类型,并计划在 2017 年初还有许多其他人。
这些队列旨在保证消息得到处理 仅一次,按照发送顺序,没有重复。 [...]
[强调我的]
正如所强调的那样,这些新的 FIFO SQS 队列将使针对手头用例的任何特殊应用程序设计变得不必要,但尚未在所有SQS regions 中提供[最初仅在美国东部(俄亥俄)和美国西部(俄勒冈) ].
【讨论】:
不完全是 FIFO,但您可以执行以下操作:
创建队列:
在队列中插入项目:
从队列中挑选物品:
您需要确保耗尽一个队列(读取 M 条消息)所花费的时间应该比填充所有队列(推送 NxM 条消息)要少得多。这将确保这批 M 消息将优先于插入队列中的其余消息。 (前 M 条消息 In First M 条消息 Out)
【讨论】: