目前我们想要拉下一个整个 FIFO 队列,并处理内容,如果有任何问题,将消息释放回队列中。
问题是,目前 AWS 只给我们 10 条消息,并且不会再给我们 10 条消息(这是在 SQS 中获取批量消息的方式,多个 10 条最大消息请求),直到我们删除或释放前 10 条消息。
但我们需要获得 10 个以上。这不可能吗?我们知道我们可以将 group_id 设置为随机字符串,这样就可以处理更多内容,但顺序无法保证,这违背了 FIFO 的目的。
我设法重现了您的结果——我可以检索 10 条消息,但再次运行相同的命令不会返回另一组消息。
相关文档似乎是:
虽然消息带有特定MessageGroupId
是不可见的,不再有属于同一个的消息MessageGroupId
返回,直到可见性超时到期。您仍然可以接收其他人的消息MessageGroupId
只要它也是可见的。
我怀疑(只是一个理论!)这是为了保留消息的顺序...如果客户端请求一组消息并且它们仍在处理中,则消息有可能返回到队列。因此,在删除原始消息或超过其可见性超时之前,不会提供更多消息。
这只是 FIFO 队列的一种行为。
看来你需要接收并删除所有消息以便能够访问所有这些内容。我会建议:
- 接收一条(或多条)消息。
- 处理它。如果一切正常,请删除该消息。
- 如果出现问题,将消息推送至新队列.
- 一旦队列为空,您需要从新队列中读取并将它们发送回原始队列(这应该保留顺序)。
如果您经常需要 Amazon SQS 提供的更多功能,您可以考虑使用Amazon MQ – ActiveMQ 的托管消息代理服务。它具有更多功能(但相应地不那么“简单”)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)