使用 SQS 和 DLQ 时是否应该禁用 lambda 重试?

Zha*_* Yi 4 amazon-sqs amazon-web-services aws-lambda

我在AWS上部署了lambda、SQS标准队列和死信队列。我maxReceiveCount在队列中配置为在将事件放入 DLQ 之前重试。Lambda 批量从 SQS 队列中提取事件并按顺序处理每个事件。retry我的问题是发生错误时如何工作。有两次重试,一次是在 lambda 上maximumRetryAttempts,另一次是在 SQS 和 DLQ 上。我应该禁用 lambda 吗?

在函数中,当它处理一个事件时,它会调用deleteMessagesqs 来删除它。如果有任何抛出异常的事件,该函数会将其抛出给 lambda 以使重试发生,这样它就不会重试成功事件。

但 lambda 本身有一个maximumRetryAttempts,我应该将它设置为吗0?否则,会在返回SQS之前重试吗?如果我不禁用它,是否会重试处理整批事件(包括成功事件)?

Mar*_*cin 6

不确定maximumRetryAttempts您指的是 lambda 上的哪一个。但是,当您通过事件源映射将 SQS 与 Lambda 结合使用时(默认情况下),lambda 上没有任何重试参数

唯一适用的重试是在 SQS 上设置的,而不是在 lambda 上设置的。

我能想到的 lambda 的重试选项(也许你也在减少)是用于异步调用的。这不适用于SQS,因为您的 lambda 是与SQS同步调用的:

Lambda 轮询队列并与包含队列消息的事件同步调用您的 Lambda 函数。