首页 > 解决方案 > 使用队列对异步 lambda 调用进行错误处理是一种好方法吗?

问题描述

我有一个 Lambda 函数,它处理一个针对我们的数据库运行的关键函数。我需要确保它至少运行一次,如果它在 3 次后失败,请发送电子邮件。目前,我正在使用队列来触发 lambda,如果 lambda 失败三次,消息将被发送到死信队列,该队列将处理发送电子邮件。

但是当我阅读 Lambda 的 AWS Doc 时,它说 Lambda 已经重试了 3 次。如果是这样而不使用队列,我可以从同一个 Lambda 函数发送电子邮件而不使用队列。这是处理 Lambda 函数中的错误的 100% 故障安全方法吗?如果不是使用队列是正确的方法吗?

标签: amazon-web-servicesaws-lambdaqueue

解决方案


这是处理 Lambda 函数中的错误的 100% 故障安全方法吗?

不。

如果不是使用队列是正确的方法吗?

是的,如果配置正确。

Lambda Retry Behavior表示如果调用是异步的,它会再重试两次。SQS 是一个基于投票的系统。Lambda 将轮询 Queue 并且它的所有调用都是同步的。

对于基于轮询的 AWS 服务(Amazon Kinesis、Amazon DynamoDB、Amazon Simple Queue Service),AWS Lambda 轮询流或消息队列并同步调用您的 Lambda 函数。

如果要等到消息失败 3 次,请将maxReceiveCount源 SQS 队列上的属性设置为 3。尽管文档没有明确提及maxReceiveCount配置为事件源的 SQS 队列,但它也适用。一旦maxReceiveCount达到低于阈值,消息将被重定向到配置的 DLQ。请记住,您需要在源 SQS 队列上而不是在 Lambda 函数本身上配置 DLQ。


推荐阅读