AWS SQS死信队列通知

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

我正在尝试设计一个基于SQS,Lambda和SNS的小型消息处理系统。如果失败,我希望将消息排入死信队列(DLQ)并调用webhook。

我想知道实现这种情况的最规范或合理的方式是什么。

目前,如果一切顺利,过程应如下:

  1. SQS(处理重试的位置)将消息排入队列
  2. Lambda由SQS调用并处理该消息
  3. Lambda发送webhook并正常完成

如果lambda中的某些内容出错(无法调用成功webhook,无法处理任务),实现我想要的最简单方法似乎是设置一个SQS将失败消息放入的DLQ1。辅助lambda然后将被调用来处理此消息,将其传递给SNS,后者将调用失败webhook,并将消息转发给DLQ2,即最终/真实DLQ。

这是最好的方法吗?

我知道的一个替代方案是Alarms,尽管我已经被警告说它们非常棘手。另一个是如果上次重试失败,则lambda会调用错误报告webhook,尽管这似乎不合适。

谢谢!

amazon-web-services aws-lambda amazon-sqs amazon-sns
1个回答
2
投票

在成功的情况下,您的架构看起来很好,但我个人觉得如果出现任何问题会让人感到困惑,因为我不明白为什么您需要两个DLQ才能开始。

这是我在失败时会做的事情:

  1. 在源SQS队列上定义DLQ并将maxReceiveCount设置为3,这意味着如果消息失败三次,它们将被重定向到配置的DLQ
  2. 创建一个侦听此DLQ的Lambda。
  3. 执行此Lambda中的webhook。
  4. 由于步骤3一旦处理完就会自动删除队列中的消息,并且显然,您希望消息在某处保留,将消息内容存储在S3上的文件中,并将文件元数据(存储桶和密钥)存储在DynamoDB中的表,因此您始终可以查询失败的消息。

我没有在这里看到SNS的任何角色,除非您想要给定消息的多个订阅者,但我认为情况并非如此。

这样,您只需要维护一个DLQ,就可以摆脱SNS,因为它只会给您的架构增加额外的复杂性。

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