AWS SQS FIFO 无法接收所有消息

AWS SQS FIFO can't receive all messages

我正在学习 AWS SQS,我已经将 6 消息发送到 FIFO 队列,同样 GroupId。但是当我尝试轮询消息时,我只能收到其中的 2 个(为什么?我使用 boto3 API 设置 MaxNumberOfMessages=10,但我只能收到 2 个。我怎么能收到所有消息?)。

(如图所示,我有5条消息可用,但我只能收到2条消息。)

我试图删除收到的两条消息中的一条并再次轮询。删掉的没了,又收到一条新消息。但是一共还是2条消息。

来自AWS Docs

The maximum number of messages to return. Amazon SQS never returns more messages than this value (however, fewer messages might be returned).

就像医生写的一样,你可以收到更少的消息。您必须多次调用 ReceiveMessage,通常在循环中完成。您还可以增加 WaitTimeSeconds,这样 ReceiveMessage 不会在没有消息时立即 return。

使用 Amazon SQS FIFO 队列意味着您希望按顺序接收消息。它还会尝试确保 消息组中排序。

这意味着,如果当前正在处理给定消息组 ID 的某些消息(“正在处理”),将不再提供该消息组的消息,因为如果未完全处理,较早的消息可能会返回到队列中。这可能会导致消息被乱序处理。

来自Using the Amazon SQS message group ID - Amazon Simple Queue Service

To interleave multiple ordered message groups within a single FIFO queue, use message group ID values (for example, session data for multiple users). In this scenario, multiple consumers can process the queue, but the session data of each user is processed in a FIFO manner.

When messages that belong to a particular message group ID are invisible, no other consumer can process messages with the same message group ID.

因此,您的选择是:

  • 不使用 FIFO 队列,或者
  • 使用不同的消息组 ID,或者
  • 对它正在做的事情感到满意,因为这是期望的 FIFO 行为