【发布时间】:2013-10-14 09:50:01
【问题描述】:
我有一个配置为处理命令对象的服务。在 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:line 235 中的 NServiceBus.Unicast.Transport.TransportReceiver.TryProcess(TransportMessage 消息) 在 C:\TeamCity\buildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Transports\Msmq\MsmqDequeueStrategy.cs:line 170 中的 NServiceBus.Transports.Msmq.MsmqDequeueStrategy.Action()
由于 ServiceInsight 特定管理服务在本质上应该是通用的,因此我认为它不需要了解消息的实际类型。意思是,我不必将我的 Message dll 扔到服务目录中(对吗?)。这意味着它只是通过简单地读取扩展标头来挖掘所有数据以持久保存到 RavenDB。
因此,基础工作已经到位。有人可以验证或无效我对 ServiceInsight 如何工作和配置的理解。其次,我的错误看起来像是 NServiceBus.Core 中的错误。我应该添加一些DLL或其他东西。是否还有另一个可能导致我忽略的问题的候选人。
【问题讨论】:
-
您能否发布以错误 q 结尾的消息的消息架构?所有消息类型也会发生这种情况吗?当您运行错误处理示例并生成错误消息时会发生什么,是否也会失败?
-
你可能想多了。几乎所有
NullReferenceException的情况都是一样的。请参阅“What is a NullReferenceException in .NET?”获取一些提示。 -
你有没有想过这个问题?这也发生在我们身上。我们实际上并没有使用 ServiceInsight,但如果管理服务正在运行,它会用这些错误填满我们的 MSMQ 存储。
标签: nservicebus nullreferenceexception serviceinsight