AWS SQS FIFO无法接收所有消息

3
我正在学习AWS SQS,向一个FIFO队列发送了6条消息,它们具有相同的GroupId。但是当我尝试拉取消息时,我只能收到其中的2条(为什么?我使用boto3 API设置了MaxNumberOfMessages=10,但我只能收到2条消息。如何接收所有消息?)。enter image description here (如图所示,我有5条可用消息,但我只能收到2条消息。)
我尝试删除其中两条消息中的一条并再次拉取。被删除的那条消失了,我收到了一条新消息。但总共还是2条消息。

为什么您要使用相同的消息组ID?您是否希望该组中的所有消息按顺序处理? - John Rotenstein
@JohnRotenstein 是的 - o_yeah
2个回答

3
使用Amazon SQS FIFO队列意味着您希望按顺序接收消息。它还会尝试确保在消息组内进行排序。这意味着,如果某个给定消息组ID的一些消息正在处理中(“飞行”),则不会提供更多的消息,因为如果没有完全处理,则可能会将较早的消息返回到队列中。这可能导致消息被无序处理。
来自使用Amazon SQS消息组ID-Amazon Simple Queue Service
要在单个FIFO队列中交错多个有序消息组,请使用消息组ID值(例如,用于多个用户的会话数据)。在此场景中,多个消费者可以处理队列,但每个用户的会话数据以FIFO方式处理。
当属于特定消息组ID的消息不可见时,其他任何消费者都不能处理具有相同消息组ID的消息。
因此,您的选择是:
  • 不要使用FIFO队列,或者
  • 使用不同的消息组ID,或者
  • 对它所做的事情感到满意,因为这是所期望的FIFO行为

1

来自AWS文档:

返回的最大消息数。Amazon SQS从不返回超过此值的消息(但是,可能会返回较少的消息)。

就像文档中所写的那样,您可能会收到较少的消息。您需要多次调用ReceiveMessage,通常在循环中完成。您还可以增加WaitTimeSeconds以使ReceiveMessage如果没有消息不会立即返回。


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