我正在学习AWS SQS,向一个FIFO队列发送了6条消息,它们具有相同的GroupId。但是当我尝试拉取消息时,我只能收到其中的2条(为什么?我使用boto3 API设置了MaxNumberOfMessages=10,但我只能收到2条消息。如何接收所有消息?)。 (如图所示,我有5条可用消息,但我只能收到2条消息。)我尝试删除其中两条消息中的一条并再次拉取。被删除的那条消失了,我收到了一条新消息。但总共还是2条消息。
使用Amazon SQS FIFO队列意味着您希望按顺序接收消息。它还会尝试确保在消息组内进行排序。这意味着,如果某个给定消息组ID的一些消息正在处理中(“飞行”),则不会提供更多的消息,因为如果没有完全处理,则可能会将较早的消息返回到队列中。这可能导致消息被无序处理。来自使用Amazon SQS消息组ID-Amazon Simple Queue Service:要在单个FIFO队列中交错多个有序消息组,请使用消息组ID值(例如,用于多个用户的会话数据)。在此场景中,多个消费者可以处理队列,但每个用户的会话数据以FIFO方式处理。当属于特定消息组ID的消息不可见时,其他任何消费者都不能处理具有相同消息组ID的消息。因此,您的选择是: 不要使用FIFO队列,或者 使用不同的消息组ID,或者 对它所做的事情感到满意,因为这是所期望的FIFO行为
来自AWS文档: 返回的最大消息数。Amazon SQS从不返回超过此值的消息(但是,可能会返回较少的消息)。 就像文档中所写的那样,您可能会收到较少的消息。您需要多次调用ReceiveMessage,通常在循环中完成。您还可以增加WaitTimeSeconds以使ReceiveMessage如果没有消息不会立即返回。