我有一个配置为处理命令对象的服务。在 Handle 方法中,我在特定的业务案例中抛出异常。发生这种情况时,它将错误发送到错误队列,我认为特定管理服务正在处理错误队列。我的理解是,Particular Management 服务会监控错误队列并处理消息,也就是说,挖掘元数据并将其持久化到 RavenDB。最后,它应该将消息转发到 Error.Log 队列。遗憾的是,每条消息似乎都被路由到了 Service.Management.Errors 队列。大概是因为特定管理服务处理程序失败了。
如果我查看 Service.Management.Errors 队列中消息的扩展标头,我会看到以下信息:
<HeaderInfo>
<Key>NServiceBus.ExceptionInfo.ExceptionType</Key>
<Value>System.NullReferenceException</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.ExceptionInfo.Message</Key>
<Value>Object reference not set to an instance of an object.</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.ExceptionInfo.Source</Key>
<Value>NServiceBus.Core</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.ExceptionInfo.StackTrace</Key>
<Value>System.NullReferenceException: Object reference not set to an instance of an object.
at NServiceBus.Unicast.Transport.TransportReceiver.ProcessMessage (TransportMessage message) in c:\TeamCity\buildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Unicast\Transport\TransportReceiver.cs:line 357
在 c:\TeamCity\buildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Unicast\Transport\TransportReceiver.cs:NServiceBus.Transports.Msmq.MsmqDequeueStrategy 中的 NServiceBus.Unicast.Transport.TransportReceiver.TryProcess(TransportMessage 消息) 处.Action() 在 c:\TeamCity\buildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Transports\Msmq\MsmqDequeueStrategy.cs:line 170
由于 ServiceInsight 特定管理服务在本质上应该是通用的,因此我假设它不需要了解消息的实际类型。意思是,我不必将我的 Message dll 扔到服务目录中(对吗?)。这意味着它只是通过简单地读取扩展头来挖掘所有数据以持久保存到 RavenDB。
因此,有了基础工作。有人可以验证或无效我对 ServiceInsight 如何工作和配置的理解。其次,我的错误看起来像是 NServiceBus.Core 中的错误。我应该添加一些DLL或其他东西。是否还有另一个可能导致我忽略的问题的候选人。