如果发生异常,将附加信息添加到 Azure Function Dead-letter-queue

Add additional information to Azure Function Dead-letter-queue if exception happened

我正在编写一个带有服务总线触发器的 Azure 函数,同时我注意到如果发生任何异常,经过一定次数的内置重试后,它会将传入消息放入死信队列(或调用 poison-queue? in microsoft document,但是,我无法从 DLQ 获取或添加任何附加信息。例如,我正在尝试转换 1000 条记录,但其中 1 条记录因数据类型无效而失败,然后异常抛出并且我的函数结束其工作,异常是什么样的,它产生的原因和时间或者会发生什么我的数据看起来像发生异常时都无法在 DLQ 消息中捕获

我尝试自定义异常对象以添加更多信息,但似乎它不会影响消息发送到死信队列的方式。 死信队列是这样设计的,它只在发生异常时才将消息从标准队列移动到 DLQ 吗?

在 azure 函数中处理异常的最佳方式是什么?根据 Microsoft 我们建议您在函数代码中使用 try-catch 块来捕获任何错误。,我是否应该将我的异常放在另一个队列中并让另一个服务查看或处理从另一边?

我们也 运行 遇到过这个问题。我们通过将消息放入具有 DequeueCount 和异常数组的信封来解决它。当消息出列时,我们会增加 Azure 函数中的出列计数。如果发生异常,我们执行以下操作:

  1. 在 catch 块中,我们增加出队计数并将完整异常添加到异常数组。
  2. 增加出队计数并将消息显式添加回队列。

这样,消息会携带出队计数和发生的任何异常的历史记录。

当我们使消息出列时,我们会检查出列计数。如果它高于我们的阈值,我们会明确地对该消息进行死信处理。

这样,死信消息将包含完整的异常历史记录。您可以按照此模式将您想要的任何日志记录信息保存到消息中,以便在它最终变成死信时您可以看到所有信息。