AWS SQS FIFO - 如何一次获得 10 多条消息?

yel*_*gel 6 fifo amazon-sqs amazon-web-services

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

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

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

Joh*_*ein 7

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

相关文件似乎是:

虽然具有特定信息的消息MessageGroupId是不可见的,但MessageGroupId在可见性超时到期之前,不会返回更多属于相同的消息。您仍然可以接收与另一个人的消息,MessageGroupId只要它也可见。

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

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

似乎您需要接收和删除所有消息才能访问它们。我会建议:

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

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