【发布时间】:2019-02-20 21:42:07
【问题描述】:
我正在使用here 描述的方法将由 SQS 触发的 lambda 函数错误处理的消息移动到 DeadLetterQueue。
在我的例子中,lambda 函数的 ReservedCapacity 设置为一个较小的值——我想限制并发执行的数量。发生的情况是,即使 Cloudwatch 日志/指标没有显示 lambda 执行错误,一些消息也不会被处理并被发送到 DLQ。
lambda 函数正在被限制,这是意料之中的。似乎当函数被限制时,消息会从 SQS 中删除然后返回,这会导致消息在 DLQ 中结束,即使 lambda 执行代码中没有错误。
现在我将 maxReceiveCount 从 1 增加到 3 作为解决方法。是否有更好的方法仅将 Lambda 执行错误(不包括限制)发送到 DLQ?
SearchJobsQueue:
Type: 'AWS::SQS::Queue'
Properties:
MessageRetentionPeriod: 1209600
VisibilityTimeout: 60
RedrivePolicy:
deadLetterTargetArn:
"Fn::GetAtt":
- SearchJobsDLQ
- Arn
maxReceiveCount: 3
编辑:我的目标是让 DLQ 只接收 lambdas,其中包含未在 lambda 代码中明确处理的错误。解决方法有以下问题:如果出现永久错误,消息将在结束 DLQ 之前至少处理 3 次,而 1 次就足够了;根据处理所有队列消息所需的时间以及 lambda 触发器检查队列的时间间隔,有可能由于限制 3 次而未处理的消息在 DLQ 中结束。
【问题讨论】:
标签: amazon-web-services aws-lambda