0

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

这是我的配置:

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

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

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

有人知道我在这里缺少什么吗?提前致谢!

4

1 回答 1

3

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

您在 DLQ-ed 消息中看到的信息证实了这一点。NSB.ASB v5 中的默认值MaxDeliveryCount设置为 6,因此 ASB 将在尝试处理更多消息时对您的消息进行 DLQ。

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

于 2016-03-31T21:54:00.680 回答