当前,我们要下拉整个FIFO队列,并处理内容,如果有问题,则将消息释放回队列。
问题是,在我们删除或释放前10个消息之前,当前AWS仅给我们10条消息,而不会给我们10条消息(这是您在SQS中获得批量消息的方式,即多个10条最大消息请求)。
不过我们需要获得10个以上。这不可能吗?我们知道我们可以将group_id设置为随机字符串,这样可以进行更多处理,但是不能保证顺序,这违反了FIFO的目的。
答案 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