【问题标题】:NServiceBus exceptions logged as INFO messagesNServiceBus 异常记录为 INFO 消息
【发布时间】:2016-04-05 05:12:27
【问题描述】:

我在 Azure Workerrole 上运行 NServiceBus 终结点。我现在将所有诊断信息发送到表存储。我在 DLQ 中收到消息,但我不知道为什么我的表存储中没有记录任何异常。

事实证明,NSB 将异常记录为 INFO,这就是为什么我无法在所有实际的详细日志记录之间轻松发现它们。

在我的例子中,无法解析命令处理程序的依赖关系,因此 Autofac 会引发异常。我完全明白为什么抛出异常,我只是不明白为什么它们被记录为 INFO。该消息最终出现在我的 DLQ 中,而我只有一个 INFO-trace 来了解原因。

在 NSB 中以这种方式处理异常是否有原因?

【问题讨论】:

  • 当您说“事实证明 NSB 将异常记录为 INFO”时,您的意思是处理程序未能加载异常还是实际上是所有异常?如果加载了处理程序并引发了异常,它将被记录为错误。你能澄清一下吗?
  • 我的意思是处理程序加载失败在日志中显示为信息:2016-03-31 08:32:45.910 INFO NServiceBus.Unicast.Transport.TransportReceiver 无法处理消息 Autofac.Core .DependencyResolutionException:在“CommandHandler”类型上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的所有构造函数都不能使用可用的服务和参数调用,我希望这将被记录为错误,而不是 INFO。

标签: nservicebus azureservicebus


【解决方案1】:

NServiceBus 没有将容器问题记录为错误,因为它是在尝试处理消息期间发生的。将尝试一级重试和二级重试。执行 SLR 时,它将记录有关重试的 WARN。最终,一条消息将无法处理并且将记录一条 ERROR 消息。 NSB and Autofac sample 可以用来重现这个。

当端点以横向扩展角色运行并且MadDeliveryCount 不足以容纳所有角色实例和每个实例将持有的重试计数时,这将导致DeliveryCount 达到最大值,而 NServiceBus 端点实例仍然认为它在将消息发送到错误队列并记录错误之前进行了尝试。类似于question here,我建议增加MaxDeliveryCount

有一个开放的NServiceBus issue 具有对 SLR 计数器的本机支持。您可以在问题中添加您的声音。下一个版本的 NServiceBus (V6) 将记录消息 ID 以及异常,以便您至少可以在 DLQ 中的消息和日志文件之间建立关联。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多