DLQ 中应该有什么样的异常?
What kind of exceptions should go in DLQ?
我正在使用订阅 SNS 主题的 AWS lambda 并在 lambda 中附加一个 DLQ,以防 lambda 抛出任何错误。此 lambda 中可能发生两种异常:
- 比如说,在 lambda 中,我得到了一个错误,这是由于错误的输入,是否也应该在 DLQ 中?此异常将不可重试,因为它需要对输入格式进行一些更改。
- 由于某些资源不可用,我遇到了异常。这个错误是可重试的,可以通过重试来修复吗?
我们应该在 DLQ 中存储哪种异常?
消息是否进入 DLQ 不应取决于错误类型。它应该取决于您的应用程序的数据完整性要求。
假设您有一个应用程序可以使用来自许多天气传感器的详细消息,并且您正在构建一组历史数据,以便您可以在某些预测模型中使用它。在这种情况下,丢失几条消息没什么大不了的,因为任何单个数据点都没有太大意义。 (事实上,您可能无论如何都想过滤掉最极端的异常值。)在这种情况下,您应该记录所有错误并设置一个警报,如果您在 Y 时间段内丢弃了超过 X% 的消息,就会发出警报。 (丢弃的消息太多可能表示存在系统问题。)
另一方面,如果您的 Lambda 使用来自电子徽章阅读器的消息,以便您可以拥有关于谁访问了建筑物的安全部分的安全记录,那么您希望将所有有错误的消息放入 DLQ 中。在这种情况下,数据的完整性非常重要,当出现错误时,您需要修复它并重新发送消息。
最后,重要的是要提到 DLQ 并不是真正用于存储。把它想象成 try
/catch
块中的 catch
。因此,何时使用 DLQ 的另一个考虑因素是您是否有某种恢复途径。如果这些消息是您的应用程序用来联系患者以提醒他们即将到来的约会的医生预约提醒消息,那么您可能有一个 Lambda 调用他们的 phone 并记录消息,但是如果 phone 行不可用或 phone 号码无效,消息可以转到 DLQ,另一个 Lambda 可以在其中使用消息并尝试发送电子邮件提醒。
我正在使用订阅 SNS 主题的 AWS lambda 并在 lambda 中附加一个 DLQ,以防 lambda 抛出任何错误。此 lambda 中可能发生两种异常:
- 比如说,在 lambda 中,我得到了一个错误,这是由于错误的输入,是否也应该在 DLQ 中?此异常将不可重试,因为它需要对输入格式进行一些更改。
- 由于某些资源不可用,我遇到了异常。这个错误是可重试的,可以通过重试来修复吗?
我们应该在 DLQ 中存储哪种异常?
消息是否进入 DLQ 不应取决于错误类型。它应该取决于您的应用程序的数据完整性要求。
假设您有一个应用程序可以使用来自许多天气传感器的详细消息,并且您正在构建一组历史数据,以便您可以在某些预测模型中使用它。在这种情况下,丢失几条消息没什么大不了的,因为任何单个数据点都没有太大意义。 (事实上,您可能无论如何都想过滤掉最极端的异常值。)在这种情况下,您应该记录所有错误并设置一个警报,如果您在 Y 时间段内丢弃了超过 X% 的消息,就会发出警报。 (丢弃的消息太多可能表示存在系统问题。)
另一方面,如果您的 Lambda 使用来自电子徽章阅读器的消息,以便您可以拥有关于谁访问了建筑物的安全部分的安全记录,那么您希望将所有有错误的消息放入 DLQ 中。在这种情况下,数据的完整性非常重要,当出现错误时,您需要修复它并重新发送消息。
最后,重要的是要提到 DLQ 并不是真正用于存储。把它想象成 try
/catch
块中的 catch
。因此,何时使用 DLQ 的另一个考虑因素是您是否有某种恢复途径。如果这些消息是您的应用程序用来联系患者以提醒他们即将到来的约会的医生预约提醒消息,那么您可能有一个 Lambda 调用他们的 phone 并记录消息,但是如果 phone 行不可用或 phone 号码无效,消息可以转到 DLQ,另一个 Lambda 可以在其中使用消息并尝试发送电子邮件提醒。