2016-03-30 22 views
0

我已经设置NServiceBus将失败的消息转发到由ServiceControl监视的错误队列。NServiceBus MessageForwardingInCaseOfFaultConfig不能按预期工作

这里是我的配置:

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

当我发送失败要处理的消息,它发送到DLQ。但是,我无法在错误或error.log队列中找到此消息的副本。当我查看AMS中的消息详细信息时,传递计数器设置为7,但是当我检查NSB日志时,我只能找到一次异常。另外,我对这个例外记录为“INFO”的原因感到有点困惑。这样做很难检测到,但这是一个单独的问题。

注意:我正在运行Azure服务总线传输。

任何人都知道我在这里失踪的想法? 在此先感谢!

+0

你可以发布相关的代码位吗? –

+0

对不起,我忘记将xml标记为“代码”,所以它被省略了...... – Laila

回答

3

当处理程序试图处理消息并失败时,消息将变为可见并将再次重试。如果在队列上设置的传递计数较低,则消息将无法处理,ASB将自行DLQ。这就是为什么消息在ASB DLQ中结束,而不是在NSB配置的错误队列中。

您在DLQ-ed消息中看到的信息正在确认。 default MaxDeliveryCount in NSB.ASB v5被设置为6,所以当消息试图被处理的时候,ASB会DLQ你的消息。

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

+0

现在,这是有道理的。谢谢你,肖恩,你总是很棒的帮助! – Laila