DLQ 实施后 SQS 消息未删除

问题描述 投票:0回答:1

我最近为SQS实现了DLQ(死信队列)。我做了以下三个配置。

  1. SQS 中的默认可见性超时。
  2. 在死信队列配置中,启用和最大接收数配置为 3。
  3. 在 Lambda 配置中,启用了报告批量项目失败。

但问题是,所有成功/失败消息都会被处理3次并移至DLQ。

对于成功的案例,将返回正确的 JSON 响应。

一旦我禁用“启用报告批次项目失败”,成功/失败情况下的消息都将被删除。

amazon-web-services aws-lambda amazon-sqs aws-sqs-fifo
1个回答
0
投票

我认为有两个直接的解决方案可以帮助您解决挑战:

  1. 与 Lambda 中整个批次的处理时间相比,队列的可见性超时可能更短。这将导致批次中的所有消息对其他消费者可见,并最终连续 3 次被标记为失败消息。要解决此问题,请确保 SQS 队列的可见性超时时间比函数的最大执行持续时间长 6 倍。
  2. 如果您已排除解决方案 1 无法解决您的问题,请检查批次中的 3 个项目中是否有任何一个失败,并确保您在处理逻辑中妥善处理它,以便将其发送到专用于观察失败消息的存储。如果您可以为此目的连接一个通知系统,那就更酷了。

PS:在 Lambda 函数中实现幂等性也是一个很好的做法,以防止重新处理之前成功处理的消息。

© www.soinside.com 2019 - 2024. All rights reserved.