Ruby on rails 如何使用AmazonSQS和ruby检索队列中的第n项

Ruby on rails 如何使用AmazonSQS和ruby检索队列中的第n项,ruby-on-rails,ruby,amazon-web-services,amazon-sqs,Ruby On Rails,Ruby,Amazon Web Services,Amazon Sqs,Iam向队列发送消息,并在rails应用程序中使用amazon sqs队列系统。但由于队列遵循FIFO过程,它将以相同的方式获取下一个项目。假设队列中有100个项目,如何从队列中检索第35个项目并对其进行处理。据我所知,AmazonSQS没有提供这样的方法。因此,是否有其他方法/解决方法可以实现此功能。没有方法可以实现此功能;由于其地理冗余性,SQS不保证队列中项目的顺序;它甚至不能保证先进先出。如果您必须按顺序处理事情,并且需要能够在队列中“向前看”,那么SQS可能不是您的最佳选择。也许像Dy

Iam向队列发送消息,并在rails应用程序中使用amazon sqs队列系统。但由于队列遵循FIFO过程,它将以相同的方式获取下一个项目。假设队列中有100个项目,如何从队列中检索第35个项目并对其进行处理。据我所知,AmazonSQS没有提供这样的方法。因此,是否有其他方法/解决方法可以实现此功能。

没有方法可以实现此功能;由于其地理冗余性,SQS不保证队列中项目的顺序;它甚至不能保证先进先出。如果您必须按顺序处理事情,并且需要能够在队列中“向前看”,那么SQS可能不是您的最佳选择。也许像DynamoDB这样的定制队列可以更好地工作。

SQS设计用于保证至少一次传递,并且不考虑消息的顺序。因此,对于你是否能做到这一点的问题,简单的答案是否定的

解决方法取决于您的用例:

  • 在处理队列消息的不同进程之间拆分工作,并确保它们不会同时处理同一项-不同的队列是一种方法,或者在每个消息的前面加上一个标识符,指示应该处理哪个进程。例如,如果我有4个守护进程正在运行,我可以在队列中的每条消息前面加上应该在其上工作的进程的ID—1、2、3或4。每个进程只处理其ID对应的编号的消息

  • 到达顺序很关键——在这种情况下,最好不要使用SQS,因为它不是这样使用的。是一个基于云的服务,它基于RabbitMQ,RabbitMQ是一个真正的FIFO队列,比SQS更适合这种情况