如何创建从 DLQ 到以 AWS Lambda 作为目标的 AWS SNS 的自动重试机制

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

我们有一个以 AWS Lambda 作为目标的 SNS,并且有一个与 SNS 关联的 DLQ,用于处理 Lambda 限制或其他错误。我们希望实现一个自动重试系统,将消息从 DLQ 重新发送到 SNS。然而,我们希望对其保持智能,并确保它不会盲目地将消息转发到 SNS。我们需要一种机制来检查 lambda 是否受到限制或者是否违反了保留的并发性。我们正在考虑使用 Cloud Watch lambda 指标的解决方案,特别是使用 Java SDK 的“限制”和“错误”。

请问有人可以建议这个解决方案是否可行吗?我们如何使用Java SDK来实现它?此外,对于这个问题有没有其他解决方案或建议?

aws-lambda amazon-cloudwatch amazon-sns metrics dlq
1个回答
0
投票

嗯,依靠 CloudWatch 指标来确定消息是否由于限制问题而失败并不是正确的方法。这是因为死信队列(DLQ)用于存储各种失败的消息,因此无法根据失败原因来区分消息。为了解决这个问题,您需要实现自己的逻辑来过滤来自 DLQ 的限制消息。

下图说明了如何实现这一目标:

  1. SQS 向 Lambda1 发送消息
  2. Lambda1 在 lambda 进程开始时将消息 ID 插入到 DynamoDB 表中,这是识别受限制消息所必需的
  3. 受限制的消息和 Lambda1 中失败的消息将移至 SQS DLQ1
  4. SQS DLQ1 配置为触发 Lambda2
  5. Lambda2 检查 DynamoDB 表以确定消息 ID 是否存在。如果是,则表示该消息之前已由 Lambda1 处理过。如果 DynamoDB 中不存在该消息 ID,则表明这些消息由于限制而被移至 DLQ
  6. 受限制的消息被发布到SNS
  7. 其他失败的消息将移至 SQS DLQ2
© www.soinside.com 2019 - 2024. All rights reserved.