了解SQS消息接收量

Mem*_*eng 8 amazon-sqs amazon-web-services aws-lambda

我有一个队列,应该接收 lambda 函数发送的消息。该函数应该只发送每个不同的消息一次。然而,我在控制台上看到了可怕的接收计数: 在此输入图像描述

由于我找不到任何关于接收计数的简单英语解释,我需要咨询 StackOverflow 社区。我有两个理论需要验证:

  1. 实际上没有那么多消息,“接收计数”之所以这么高,只是因为我轮询了消息很长时间,所以消息被捕获了不止一次;
  2. 将消息发送到队列的函数是 SQS 触发的,这些消息可能由多个处理器处理。虽然我VisibilityTimeout已经设置了,但是处理完的消息会被删除吗?如果它们没有被留下,就没有理由再次捕获和处理它们。

任何调试建议将不胜感激!

Tim*_*ann 12

因此,接收计数基本上是 lambda(或任何其他消费者)接收消息的次数。消费者可能会多次收到消息(这是设计使然,您应该在逻辑中处理它)。

话虽这么说,如果您的 lambda 无法处理消息(甚至达到执行限制),接收计数也会增加。默认值为 3 次,因此如果您的 lambda 出现错误,则每条消息至少会收到 3 次。

此外,当您通过 AWS 控制台轮询消息时,您基本上会增加接收计数。