对同一个 SQS FIFO 队列执行 receiveMessageRequest

Executing receiveMessageRequest to the same SQS FIFO queue

我同时有两个 lambda 实例 运行,这两个实例将对同一个 FIFO 队列进行一次简短的轮询,间隔只有几秒钟。

第一个实例将收到前 10 条消息,第二个实例将收到 0 条消息,即使队列中总共有 15 条消息。

为什么第二个实例无法从队列中获取剩余的 5 条消息?这是预期的行为吗?我该如何克服它?

您的 15 条消息(很可能)都属于同一个消息组 ID。因此,在成功处理和删除前 10 个之前,您的消费者将无法使用剩余的 5 个。对于 FIFO 队列,这是保留消息顺序的预期行为(为@Michael-sqlbot 欢呼,根据下面的评论用这个答案指向正确的方向)。

对标准队列使用 long polling。短轮询不会检查每个 SQS 服务器,因此,它有可能无法获得所有结果。长轮询会检查所有 SQS 服务器,因此会获得所有结果。