我将消息发送到队列并在rails应用程序中使用amazon sqs排队系统。但由于队列遵循FIFO过程,它将以相同的方式获得下一个项目。假设我队列中有100个项目,如何从队列中检索第35个项目并进行处理。据我所知,亚马逊sqs没有这样做的方法。那么我是否可以实现此功能的任何其他方法/解决方法。
答案 0 :(得分:1)
没有方法可以做到这一点;由于地理上的多余性,SQS不保证队列中的项目顺序;它甚至不能保证FIFO。如果你绝对必须按顺序处理事情,并且需要具备“展望未来”的能力。在队列中,SQS可能不是您的最佳选择。也许像DynamoDB这样的自定义队列可能会更好。
答案 1 :(得分:0)
SQS旨在保证至少一次交付,并且不考虑消息的顺序。因此,关于你是否可以这样做的问题的简单答案是否定的。
解决方法取决于您的用例:
在处理队列消息的不同进程之间拆分工作并确保它们不处理相同的项目 - 不同的队列是一种方法,或者在每条消息前面加上一个标识符,表示哪个进程应该工作在上面。例如,如果我有4个守护进程正在运行,我可以在队列中的每个消息前面加上应该处理它的进程的ID - 1,2,3或4.每个进程只处理带有与其对应的号码。
到达顺序至关重要 - 在这种情况下,您最好不要使用SQS,因为它不能以这种方式使用。 CloudAMQP是基于云的服务,基于RabbitMQ,这是一个真正的FIFO队列,并且比SQS更适合这种情况。