NServiceBus MessageForwardingInCaseOfFaultConfig无法按预期工作

时间:2016-03-30 08:04:09

标签: azure nservicebus nsb-servicecontrol

我已将NServiceBus设置为将失败的消息转发到由ServiceControl监视的错误队列。

这是我的配置:

 <section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
<MessageForwardingInCaseOfFaultConfig ErrorQueue="error" />

当我发送无法处理的消息时,它会被发送到DLQ。但是,我在error或error.log队列中找不到此消息的副本。当我查看AMS中的消息详细信息时,交付计数器设置为7,但是当我检查NSB日志时,我只能找到一次异常。此外,我有点困惑为什么这个异常被记录为“INFO”。这使得检测这种方式变得更加困难,但这是一个单独的问题。

注意:我正在Azure Service Bus Transport上运行。

任何人都知道我在这里缺少什么? 提前谢谢!

1 个答案:

答案 0 :(得分:3)

当处理程序尝试处理消息并且失败时,消息将变为可见并将再次重试。如果队列上设置的传递计数较低,则消息将失败处理,ASB将本机DLQ它。这就是消息在ASB DLQ中结束而不是在NSB配置的错误队列中的原因。

您在DLQ消息中看到的信息正在确认。 default MaxDeliveryCount in NSB.ASB v5设置为6,因此当尝试处理消息时,ASB会DLQ您的消息。

这是因为NSB拥有自己的(每个实例)重试计数器而不使用ASB提供的本地DeliveryCount。如果您的端点已扩展,则需要调整MaxDeliveryCount,因为每个角色实例都可以获取消息并尝试处理它。每个实例都有它的重试计数器。因此,实例计数器可能低于6,但消息DeliveryCount将超过该值。