NServiceBus MessageForwardingInCaseOfFaultConfig 未按预期工作
NServiceBus MessageForwardingInCaseOfFaultConfig not working as expected
我已经设置 NServiceBus 将失败的消息转发到由 ServiceControl 监视的错误队列。
这是我的配置:
<section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
<MessageForwardingInCaseOfFaultConfig ErrorQueue="error" />
当我发送的消息无法处理时,它被发送到 DLQ。但是,我在错误或 error.log 队列中找不到此消息的副本。当我在AMS中查看消息详情时,Delivery Counter设置为7,但是当我查看NSB日志时,我只能发现一次异常。此外,我对为什么将此异常记录为 "INFO" 感到有点困惑。这使得以这种方式检测变得更加困难,但这是一个单独的问题。
注意:我 运行 使用 Azure 服务总线传输。
有人知道我在这里遗漏了什么吗?
提前致谢!
当处理程序尝试处理消息但失败时,消息将变为可见并再次重试。如果在队列上设置的传递计数较低,则消息将无法处理并且 ASB 将在本地对它进行 DLQ。这就是消息最终出现在 ASB DLQ 而不是 NSB 配置的错误队列中的原因。
您在 DLQ-ed 邮件中看到的信息证实了这一点。 default MaxDeliveryCount
in NSB.ASB v5 设置为 6,因此 ASB 将在尝试处理超过该值的消息时对您的消息进行 DLQ。
这是因为 NSB 有自己的(每个实例)重试计数器,而不是使用 ASB 提供的本机 DeliveryCount
。如果你有你的端点横向扩展,你需要调整 MaxDeliveryCount
因为角色的每个实例都可以获取一条消息并尝试处理它。每个实例都会有它的重试计数器。因此,实例计数器可能低于 6,但消息 DeliveryCount
将超过该值。
我已经设置 NServiceBus 将失败的消息转发到由 ServiceControl 监视的错误队列。
这是我的配置:
<section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
<MessageForwardingInCaseOfFaultConfig ErrorQueue="error" />
当我发送的消息无法处理时,它被发送到 DLQ。但是,我在错误或 error.log 队列中找不到此消息的副本。当我在AMS中查看消息详情时,Delivery Counter设置为7,但是当我查看NSB日志时,我只能发现一次异常。此外,我对为什么将此异常记录为 "INFO" 感到有点困惑。这使得以这种方式检测变得更加困难,但这是一个单独的问题。
注意:我 运行 使用 Azure 服务总线传输。
有人知道我在这里遗漏了什么吗? 提前致谢!
当处理程序尝试处理消息但失败时,消息将变为可见并再次重试。如果在队列上设置的传递计数较低,则消息将无法处理并且 ASB 将在本地对它进行 DLQ。这就是消息最终出现在 ASB DLQ 而不是 NSB 配置的错误队列中的原因。
您在 DLQ-ed 邮件中看到的信息证实了这一点。 default MaxDeliveryCount
in NSB.ASB v5 设置为 6,因此 ASB 将在尝试处理超过该值的消息时对您的消息进行 DLQ。
这是因为 NSB 有自己的(每个实例)重试计数器,而不是使用 ASB 提供的本机 DeliveryCount
。如果你有你的端点横向扩展,你需要调整 MaxDeliveryCount
因为角色的每个实例都可以获取一条消息并尝试处理它。每个实例都会有它的重试计数器。因此,实例计数器可能低于 6,但消息 DeliveryCount
将超过该值。