我在 AWS 上部署了 lambda、SQS 标准队列和死信队列。我在队列中配置了 maxReceiveCount
以在将事件放入 DLQ 之前重试。 Lambda 从 SQS 队列中批量拉取事件并依次处理每个事件。我的问题是关于 retry
在出现错误时如何工作。有两次重试,一次是在lambda maximumRetryAttempts
上,一次是在SQS和DLQ上。我应该禁用 lambda 吗?
在函数中,当它处理一个事件时,它调用 sqs 上的 deleteMessage
来删除它。如果有任何事件抛出异常,该函数会将其抛给 lambda 以进行重试,这样它就不会重试成功事件。
但是 lambda 本身有一个 maximumRetryAttempts
,我应该将它设置为 0
吗?否则,它会在返回 SQS 之前重试吗?如果我不禁用它,是否会重试处理包括成功事件在内的整批事件?
最佳答案
不确定您指的是 lambda 上的哪个 maximumRetryAttempts
。但是当您通过 event source mapping 将 SQS 与 Lambda 结合使用时,默认情况下,lambda 上没有任何重试参数。
唯一适用的重试设置为 SQS,而不是 lambda。
我能想到的 lambda 的重试选项,也许你也在精简,适用于 asynchronous invocation .这不适用于 SQS,因为您的 lambda 是与 SQS 同步调用的:
Lambda polls the queue and invokes your Lambda function synchronously with an event that contains queue messages.
关于amazon-web-services - 使用 SQS 和 DLQ 时是否应该禁用 lambda 重试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67101613/