amazon-web-services - 如何确保与 SQS 集成的 Lambda 调用的下游 API 在消息进入 DLQ 之前至少被调用 2 次?
问题描述
我有 lambda 使用 SQS 事件作为输入。SQS 队列也有一个 DLQ。lambda 函数调用下游 Restful API(调用此操作 DoPostToAPI())我需要保证 lambda 函数尝试调用 DoPostToAPI()至少 2 次(在消息到达 DLQ 之前)
为了完成上述要求,我需要设置什么 Lambda Retries 和 SQS Redrive 策略配置?
我需要 100% 确定到达 DLQ 的消息仅到达,因为它们已尝试发送到下游 API DoPostToAPI() 2 次,并且如果可能的话,由于任何其他原因,消息不会到达 DLQ 。
对我来说,只有在尝试操作时消息才应该到达 DLQ 是有道理的,而不是出于其他原因(即我不希望消息到达 DLQ 纯粹是因为节流,因为应该先尝试 DoPostToAPI()发送到 DLQ)如果甚至没有尝试 lambda 函数操作,我为什么要在 DLQ 上发送消息?换句话说,我需要保证在项目移动到 DLQ 之前调用 lambda 操作。
我能得到一些帮助吗?由于 DoPostToAPI() api 调用失败,是否可以保证 DLQ 上的消息已经到达?还是(更不幸的是)消息到达 DLQ 的原因可能不是对下游 API 的调用失败?
从到目前为止我在网上阅读的内容来看, lambda 在接收 SQS 消息并将消息移动到队列上的不可见之后,可能会遇到限制问题并重新尝试 lambda 调用。但是,如果它再次遇到 lambda 限制,它可能最终回到主队列,如果它达到其最大接收计数,则可以将消息放在 DLQ 上,而根本没有尝试 lambda。这个对吗?
为简单起见,让我们想象以下输入
- SQS队列1
- SQSQueue1DLQ
- LambdaFunction1 --> ServiceClient1.DoPostToAPI()
lambda“maximum_retry_attempts”和 SQS redrive_policy“maxReceiveCount”之间的相互作用是什么
解决方案
为了确保您的 lambda 在使用 SQS 时尝试重试,您只需设置 SQS 属性
maxReceiveCount
此值控制在消息进入死信队列之前对给定批次尝试多少 lambda 调用。
不幸的是,lambda 属性
maximum_retry_attempts
不适用于使用SQS作为函数事件触发器的 lambda 函数。
推荐阅读
- xml - 如何在 XML 文件之间创建链接
- python - Django mange.py migrate --> 没有迁移文件夹,也没有创建表
- db2 - 在 db2 中运行 LOAD 实用程序后的 RUNSTATS
- reactjs - 如何根据状态更新 react-i18next 语言?
- python - 为什么'Traceback(最近一次通话最后一次):文件“
",第 1 行,在 ImportError:我尝试安装 django 时没有名为 django 的模块? - html - 用 div 元素覆盖视频元素
- android - 当我运行我的应用程序时,我遇到了这个问题
- pytorch - 使用 pytorch 应用简单的转换来获得二值图像
- javascript - 如何从 localStorage 中的对象数组中访问值
- ruby-on-rails - 无法显示阵列中的单个图像(Rails 活动存储)