SQS Lambda 集成 - 抛出异常时会发生什么

qkh*_*pro 3 amazon-sqs amazon-web-services aws-lambda

该文件指出

Lambda 函数可能会因以下任一原因而失败:

该函数在尝试到达端点时超时。

该函数无法成功解析输入数据。

该函数遇到资源限制,例如内存不足错误或其他超时。

就我而言,我使用 C# Lambda 与 SQS 集成

如果调用失败或超时,批次中的每条消息都将返回到队列,并且一旦可见性超时期限到期,每条消息都可以进行处理

我的问题:如果我使用 SQS Lambda 集成 (.NET),会发生什么情况

  • 我的函数抛出异常
  • 我的 SQS 可见性计时器设置为 15 分钟,最大接收计数为 1,DLQ 设置

该函数会重试吗?当所有重试后都抛出异常时,是否会放入DLQ?

Joe*_*Joe 7

当您的代码抛出未处理/未捕获的异常时,Lambda 就会失败。如果将最大接收计数设置为 1,则消息将在第一次失败后发送到 DLQ,不会重试。例如,如果您的最大接收计数设置为 5,则 Lambda 函数失败时,消息将在可见性超时到期后返回到队列。

出现此行为的原因是您授予 Lambda 代表您轮询队列的权限。如果它收到一条消息,它就会调用一个函数,并为您提供一次处理该消息的机会。如果您失败,消息将返回到队列,并且 Lambda 继续代表您轮询队列,它并不关心下一条消息是与失败的消息相同还是全新的消息。

这是一篇很棒的博客文章,它帮助我了解这些触发器是如何工作的。