2014-04-03 51 views
0

Iam将邮件发送到队列并在rails应用程序中使用亚马逊sqs队列系统。但由于队列遵循FIFO流程,因此它将以相同的方式获取下一个项目。假设如果我有一个队列中的100个项目,我如何从队列中检索第35个项目并处理它。据我所知,amazon sqs没有提供这样的方法。那么是否有任何其他方法/解决方法可以实现此功能。如何检索亚马逊sqs和ruby队列中的第n个项目

回答

1

没有办法做到这一点; SQS不保证队列中物品的顺序由于其地理上的冗余性质;它甚至不能保证FIFO。如果您绝对必须按顺序处理事情,并且需要在队列中“向前看”的能力,SQS可能不是您的最佳选择。也许像DynamoDB这样的定制队列可能会更好。

0

SQS旨在保证至少一次交付并且不考虑消息的顺序。所以对于你是否可以这样做的问题的简单回答是否定的。

一个解决将取决于你的用例:

  1. 不同工艺处理队列中的消息,使中拆分工作,确保他们不都处理相同的项目 - 不同的队列是一种方法,或者在每个消息前加上一个标识符来表示哪个进程应该在其上工作。例如,如果我有4个守护进程正在运行,我可以在队列中为每个消息加上应该在其上运行的进程的ID - 1,2,3或4。每个进程只会处理与其对应的编号的消息ID。

  2. 到达顺序至关重要 - 在这种情况下,最好不要使用SQS,因为它不能用于这种方式。 CloudAMQP是基于云的服务,基于RabbitMQ,这是一个真正的FIFO队列,并且比SQS更适合这种情况。