joe*_*oey 3 amazon-sqs amazon-web-services aws-lambda
当使用带有死信和 Lambda 的 SQS 时,为什么在 lambda 因运行时异常而失败后消息仍保持“飞行中”状态 5 分钟?
我创建了 3 个资源
MyQueue(配置为将无法送达的消息发送到 MyQueueDLQ。默认可见性超时:30 秒)
我的队列DLQ
Lambda(重试尝试设置为 0,超时 30 秒)
出于某种原因,我期望(可能是因为缺乏理解)当我的 lambda 失败时,死信队列会在失败后不久收到消息。(而不是几分钟后)。
我究竟如何确保死信队列以尽可能最快的方式获取消息,以便响应死信队列消息的任何内容都不会不必要地等待几分钟?
注意:我故意在 lambda 中抛出一个运行时异常来测试它,以便我了解这一切是如何工作的。
我的目标是确保消息尽快进入死信队列。5 分钟是我能做的最好的吗?
更新 1:我已将 lambda 的超时设置为 5 秒,将队列的超时设置为 25 秒,现在消息到达 DLQ 需要大约 1 分 40 秒。这仍然不符合我的期望。消息不是应该在 25 秒内到达 DLQ 吗?
当您的 lambda 接收来自 MyQueue 的消息时,消息将进入不可见模式,在该模式下,也读取同一队列的其他人看不到该消息。
通常,当您的函数成功处理消息时,lambda 服务会自动从队列中删除该消息。但是,如果没有发生这种情况,则该消息在剩余的不可见时间内保持不可见。然后,当它再次可见时,lambda 服务可能会再次尝试处理同一消息。如果重试次数已用完,消息将进入 DLQ。
有关此内容的更多信息请参见此处:
如果一条消息多次处理失败,Amazon SQS 可以将其发送到死信队列。当您的函数返回错误时,Lambda 会将其留在队列中。发生可见性超时后,Lambda 再次收到消息。要在多次接收后将消息发送到第二个队列,请在源队列上配置死信队列。
| 归档时间: |
|
| 查看次数: |
3193 次 |
| 最近记录: |