amazon-web-services - 使用队列对异步 lambda 调用进行错误处理是一种好方法吗?
问题描述
我有一个 Lambda 函数,它处理一个针对我们的数据库运行的关键函数。我需要确保它至少运行一次,如果它在 3 次后失败,请发送电子邮件。目前,我正在使用队列来触发 lambda,如果 lambda 失败三次,消息将被发送到死信队列,该队列将处理发送电子邮件。
但是当我阅读 Lambda 的 AWS Doc 时,它说 Lambda 已经重试了 3 次。如果是这样而不使用队列,我可以从同一个 Lambda 函数发送电子邮件而不使用队列。这是处理 Lambda 函数中的错误的 100% 故障安全方法吗?如果不是使用队列是正确的方法吗?
解决方案
这是处理 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。
推荐阅读
- php - 自动化 WordPress 中的每周后台功能
- windows - 如何在 Windows 10 中安装的 ubuntu 终端中访问 anaconda 提示符?
- r - 如何在 for 循环中包含 dplyr::mutate
- c++ - python 3.9 x64 ctypes通过引用传递char指针(char**)OSError:异常:访问冲突读取0xFFFFFFFFFFFFFFFF
- php - 在 Laravel 8.x 中获取货币符号
- c# - 如何使用 Visual Studio 2019 在 Crystal Report 中打开导出的文件?
- r - Slackr:x `id` 的问题 - 无法发送消息
- visual-studio - VSTS 错误:SQLSQL71501:计算列:包含对对象的未解析引用
- python - 使用 Textract,如何从 pdf 文件中提取表格并通过 .py 脚本将其输出到 csv 文件中?
- java - Java / Spring通过接口使对象可用?