Amazon web services Lambda在处理失败后未使用队列中的所有消息

Amazon web services Lambda在处理失败后未使用队列中的所有消息,amazon-web-services,aws-lambda,amazon-sqs,Amazon Web Services,Aws Lambda,Amazon Sqs,我有一个SQS队列,名为events,带有一个lambda触发器,名为consumer。此外,我还有一个死信队列,名为poison_events,配置在队列events(而不是Lambda)上。当lambda抛出错误时,它不会像预期的那样删除接收到的消息,并将消息留在队列中。lambda将再次尝试处理消息,这从消息的接收计数的增加可以看出 我的目标是在超过MaxReceiveCount的10之后,将所有无法处理的消息发送到死信队列。 当队列中的可用消息增加,并且lambda无法扩展以处理可用消息

我有一个SQS队列,名为events,带有一个lambda触发器,名为consumer。此外,我还有一个死信队列,名为poison_events,配置在队列events(而不是Lambda)上。当lambda抛出错误时,它不会像预期的那样删除接收到的消息,并将消息留在队列中。lambda将再次尝试处理消息,这从消息的接收计数的增加可以看出

我的目标是在超过MaxReceiveCount的10之后,将所有无法处理的消息发送到死信队列。 当队列中的可用消息增加,并且lambda无法扩展以处理可用消息时,我的问题就开始了

我假设lambda将进行扩展,以便它将处理队列中的所有消息,直到接收计数超过maxReceiveCount并发送到死信队列。但事实并非如此,lambda只能扩展到大约每分钟100次调用,这还不足以处理消息

请注意,lambda的并发性设置为默认值1000

我有两种工作原理:

  • 在处理队列中可用的消息之前,lambda将首先处理新消息,并且仅扩展到处理新消息
  • 我的第二个理论是lambda错误计数非常高,aws将拒绝扩展函数来处理可用消息
  • lambda调用

    可用消息

    错误计数和成功率

    lambda并发性

    请注意,SQS可以将消息批量传递到单个Lambda调用。默认批处理大小为10。@jarmod调用量应随着可用消息数量的增加而增加。当前调用量(~100)和批大小不足以处理当前可用消息量(~400K)