首页 > 解决方案 > 处理失败后 Lambda 未消耗队列中的所有消息

问题描述

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

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

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

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

我有两个工作理论:

  1. lambda 将首先处理新消息并仅扩展到处理新消息,然后再处理队列中可用的消息。
  2. 我的第二个理论是 lambda 错误计数如此之高,以至于 aws 将拒绝扩展函数来处理可用消息。

lambda 调用 lambda 调用

可用消息 可用消息

错误计数和成功率 错误计数和成功率

lambda 并发 lambda 并发

标签: amazon-web-servicesaws-lambdaamazon-sqs

解决方案


推荐阅读