使用队列对异步lambda调用进行错误处理是一种好方法吗?

时间:2019-03-29 02:19:05

标签: amazon-web-services aws-lambda queue

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

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

1 个答案:

答案 0 :(得分:2)

  

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

否。

  

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

是的,如果配置正确。

Lambda Retry Behaviour说,如果调用是 异步 ,它将重试两次。 SQS是基于轮询的系统。 Lambda将轮询队列,并且其所有调用将 同步

  

用于基于民意测验的AWS服务(Amazon Kinesis,Amazon DynamoDB,Amazon   简单队列服务),AWS Lambda轮询流或消息队列   并同步调用您的Lambda函数。

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