首页 > 解决方案 > DLQ 中应该有什么样的异常?

问题描述

我正在使用订阅了 SNS 主题的 AWS lambda 并在 lambda 中附加了一个 DLQ,以防 lambda 抛出任何错误。在这个 lambda 中可能发生的异常大致有 2 种:

  1. 比如说,在 lambda 中,由于输入错误,我得到了一个错误,这也应该在 DLQ 中出现吗?此异常将无法重试,因为它需要对输入格式进行一些更改。
  2. 由于某些资源不可用,我遇到了异常。此错误是可重试的并且可以通过重试来修复?

我们应该在 DLQ 中存储哪种异常?

标签: amazon-web-servicesaws-lambdaamazon-sqsamazon-sns

解决方案


消息是否进入 DLQ 不应取决于错误的类型。它应该取决于您的应用程序的数据完整性要求。

假设您有一个应用程序使用来自许多天气传感器的微小消息,并且您正在构建一组历史数据,以便您可以在某些预测模型中使用它。在这种情况下,一些丢失的消息没什么大不了的,因为任何单个数据点都不是很有意义。(事实上​​,您可能无论如何都想过滤掉最极端的异常值。)在这种情况下,您应该记录所有错误并设置警报,如果您在 Y 时间段内丢弃超过 X% 的消息,则发出警报。(太多丢弃的消息可能表明存在系统性问题。)

另一方面,如果您的 Lambda 使用来自电子徽章阅读器的消息,以便您可以获得谁访问了建筑物的安全部分的安全记录,那么您希望将所有有错误的消息放在 DLQ 中。在这种情况下,数据的完整性非常重要,当出现错误时,您需要修复它并重新发送消息。

最后,值得一提的是,DLQ 并不是真正用于存储的。把它想象成catch一个try/catch块。因此,何时使用 DLQ 的另一个考虑因素是您是否有某种恢复路径。如果消息是您的应用程序用来联系患者以提醒他们即将到来的预约的医生预约提醒,那么您可能有一个 Lambda 呼叫他们的电话并记录消息,但如果电话线路不可用或电话号码无效,消息可以转到另一个 Lambda 可以使用该消息并尝试发送电子邮件提醒的 DLQ。


推荐阅读