NServiceBus ServiceInsight所有消息都被路由到ServiceBus.Management.Errors

时间:2013-10-07 17:47:22

标签: nservicebus nullreferenceexception serviceinsight

我有一个配置为处理命令对象的服务。在Handle方法中,我在特定的业务案例中抛出异常。发生这种情况时,它会将错误发送到错误队列,我认为特殊管理服务正在处理错误队列。我的理解是,特殊管理服务将监视错误队列并处理消息,也就是说,挖掘元数据并将其持久保存到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.Unicast.Transport.TransportReceiver.TryProcess(TransportMessage消息):第235行    位于c:\ TeamCity \ buildAgent \ work \ d4de8921a0aabf04 \ src \ NServiceBus.Core \ Transports \ Msmq \ MsmqDequeueStrategy.cs中的NServiceBus.Transports.Msmq.MsmqDequeueStrategy.Action():第170行      

由于ServiceInsight特殊管理服务可能被认为是通用的,我认为它不需要知道实际的消息类型。意思是,我没有把我的Message dll扔进服务目录(对吗?)。这意味着它只是简单地读取扩展标题就可以将所有数据保存到RavenDB中。

所以有了这个基础工作。有人可以验证或无效我对ServiceInsight如何工作和配置的理解。其次,我的错误看起来像NServiceBus.Core中的错误。我应该添加一些DLL或其他东西。是否有另一个可能导致这个问题的候选人,我只是忽略了。

1 个答案:

答案 0 :(得分:0)

我们遇到了类似的问题,虽然我们的问题可能对我们非常具体,但我会分享它以防万一。

我们的大多数服务都使用带有XML序列化的NServiceBus 4.0.3,但是我们有一个使用NSB 3.3.1和二进制序列化的旧服务。该服务正在记录到审计队列,当特殊管理服务尝试读取这些消息时,它将失败。由于NSB re-throwing the exception并且丢失了原始堆栈跟踪,我不确定错误的来源是什么。我怀疑它正在尝试读取不存在的标题。它也可能是由于使用了二进制序列化。

我们的解决方案是关闭那个旧服务的审核。