代码之家  ›  专栏  ›  技术社区  ›  JustStarted

对同一SQS FIFO队列执行receiveMessageRequest

  •  0
  • JustStarted  · 技术社区  · 6 年前

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

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

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   smcstewart    6 年前

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

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