AWS SQS FIFO - 如何一次获取多于10条信息?

8
目前我们需要拉取整个FIFO队列并处理内容,如果有任何问题,就将消息释放回队列。
问题在于,目前AWS只给了我们10条消息,并且不会再给我们10条消息(这是您获取SQS中多个10条最大消息请求的方法),直到我们删除或释放第一批10条消息。
然而,我们需要获得超过10条。这是否不可能?我们知道可以将group_id设置为随机字符串,这样就可以处理更多消息,但是没有保证顺序,这违反了FIFO的目的。
2个回答

9
我成功地重现了您的结果--我能够检索到10条消息,但是再次运行相同的命令将不会返回另一组消息。
相关文档似乎是:
当具有特定MessageGroupId的消息不可见时,直到可见性超时过期,不会返回属于同一MessageGroupId的更多消息。只要另一个MessageGroupId也可见,仍然可以接收其他消息。
我怀疑(只是一个理论!)这是为了保留消息的顺序...如果客户端请求一组消息并且它们仍在处理中,则有可能将消息返回到队列。因此,在删除原始消息或通过其可见性超时之前,不提供进一步的消息。
这只是FIFO队列的行为。
似乎您需要接收和删除所有消息才能访问它们所有。我建议:
  • 接收一条或多条消息。
  • 处理它。如果一切正常,删除消息。
  • 如果有问题,将消息推送到新队列
  • 一旦队列为空,您需要从新队列中读取并将它们发送回原始队列(应保留排序)。

如果您经常需要更多 Amazon SQS 提供的功能,则可以考虑使用 Amazon MQ – ActiveMQ 托管消息代理服务。它具有更多的功能(但相应地不太“简单”)。


1
只是一种理论!不仅仅是理论...这正是它的本质。SQS使用HTTPS,因此没有“连接”或消费者身份的概念,因此这种行为是有意设计的。其他任何行为都无法保证按顺序交付,因为SQS不知道谁在请求下一批。 - Michael - sqlbot

0

1
问题在于,如果每个消息(或最多10个)具有不同的消息组ID,则内容将以无序方式返回。虽然这样可以拉取超过10个,但不是按照FIFO的顺序(当使用FIFO队列时,这是违反直觉的)。 - yellowarchangel
那么如果我们并不真的关心顺序被保留,这应该没问题吧? - ThisGuyCantEven
没关系,根据AWS文档: 为了避免在具有多个生产者和消费者的系统中处理重复消息,其中吞吐量和延迟比排序更重要,生产者应为每条消息生成唯一的消息组ID。 - ThisGuyCantEven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接