来自Amazon SQS FAQ页面:
由于Amazon SQS的分布式特性,Amazon SQS不能保证按先进先出的顺序访问Amazon SQS队列中的消息。如果您需要特定的消息排序,请设计您的应用程序来处理它。
我的问题是 - 如何设计这种应用程序?
来自Amazon SQS FAQ页面:
由于Amazon SQS的分布式特性,Amazon SQS不能保证按先进先出的顺序访问Amazon SQS队列中的消息。如果您需要特定的消息排序,请设计您的应用程序来处理它。
我的问题是 - 如何设计这种应用程序?
在发送消息时,您可以设置消息序列计数器。在接收端,如果序列正确,您可以继续处理消息。如果出现序列错误的消息,则等待正确的消息到来(在此期间将按序号排序的消息存储在列表中),然后处理正确的序列消息以及在其之间到达的其他消息。
Amazon SQS刚刚获得了FIFO队列,具有精确一次性处理和去重功能:
今天,我们通过支持FIFO(先进先出)队列,使SQS更加强大和灵活。 我们现在正在两个地区推出这种新类型的队列,并计划在2017年初在许多其他地区提供。
这些队列旨在保证消息按发送顺序精确处理,而且不会有重复。[...]
[我强调]
正如强调的那样,这些新的FIFO SQS队列将使针对特定用例的任何特殊应用程序设计变得不必要,但并非在所有SQS区域中都可用[最初仅在美国东部(俄亥俄州)和美国西部(俄勒冈州)可用]。
SQS
队列。但是,您可以在发送消息时设置消息序列计数器,并处理消息,前提是序列正确。如果在接收端没有接收到正确的连续消息,则需要等待正确的消息才能处理它。不完全是FIFO,但您可以按以下方式操作:
将项目插入队列:
从队列中获取项目:
您需要确保,排空一个队列(读取M个消息)所需的时间应该比填满所有队列(推送NxM消息)的时间要短得多。这将确保M个消息批次优先于在队列中插入的其他消息。(先进先出)