AWS SQS FIFO-如何一次获取10条以上消息?

时间:2018-08-02 20:39:32

标签: amazon-web-services amazon-sqs fifo

当前,我们要下拉整个FIFO队列,并处理内容,如果有问题,则将消息释放回队列。

问题是,在我们删除或释放前10个消息之前,当前AWS仅给我们10条消息,而不会给我们10条消息(这是您在SQS中获得批量消息的方式,即多个10条最大消息请求)。

不过我们需要获得10个以上。这不可能吗?我们知道我们可以将group_id设置为随机字符串,这样可以进行更多处理,但是不能保证顺序,这违反了FIFO的目的。

2 个答案:

答案 0 :(得分:1)

我设法重现了您的结果-我可以检索10条消息,但是再次运行同一命令不会返回另一组消息。

相关文档似乎是:

  

虽然具有特定def max_array_diff(line): return max(line) line = [int(x) for x in raw_input().split()] print max_array_diff(line) print line 的消息是不可见的,但直到可见性超时到期,才不再返回属于同一MessageGroupId的消息。只要仍然可见,您仍然可以与另一个MessageGroupId接收消息。

我怀疑(只是一个理论!)这是为了保留消息的顺序...如果客户端要求一组消息并且它们仍在处理中,则可能会将消息返回给队列。因此,在删除原始消息或超过其可见性超时之前,将不再提供其他消息。

这只是FIFO队列的一种行为。

您似乎需要接收并删除所有邮件,才能访问所有邮件。我建议:

  • 接收一条(或更多)消息。
  • 处理它。如果一切正常,请删除该消息。
  • 如果有问题,请将消息推送到新队列
  • 一旦队列为空,您将需要从新队列中读取并将其发送回原始队列(应保留顺序)。

如果您经常需要Amazon SQS提供的更多功能,则可以考虑使用Amazon MQ – Managed message broker service for ActiveMQ。它具有更多功能(但因此“简单”程度较低)。

答案 1 :(得分:-2)

如果设置另一个MessageGroupId,即使不释放或删除以前的消息,也可以获得10条消息。 https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-messagegroupid-property.html