这是场景。 我在NServiceBus 3.0.0.1504(核心DLL版本)。当其中一个处理程序出现异常时,我会收到警告消息。队列设置为DTC。有趣的是,虽然我在QA中收到此警告消息 - 它成功重试N次并将消息放入错误队列中。然而,在生产中,(在少数情况下 - 我没有看到这种情况持续发生),它只是尝试处理消息一次并停止。它没有将消息放入错误队列中,也没有将它退出N次,也没有将消息放回队列中。 我没有真正看到QA和Prod环境之间的区别,它是相同的代码库,我们使用构建脚本授予队列权限。
这是堆栈跟踪 NServiceBus.Unicast.Transport.Transactional.TransactionalTransport - 为ID = 1fb282b5-7a9e-41ea-834a-5f6767273324 \ 195311762的消息引发“收到传输消息”事件失败NServiceBus.Unicast.Transport.TransportMessageHandlingFailedException:类型为“NServiceBus.Unicast”的异常。抛出了Transport.TransportMessageHandlingFailedException。 位于d:\ BuildAgent-01 \ work \ NServiceBus.Trunk \ src \ unicast \ NServiceBus.Unicast \ UnicastBus.cs中的NServiceBus.Unicast.UnicastBus.DispatchMessageToHandlersBasedOnType(IBuilder构建器,IMessage toHandle,类型messageType):第899行 在NS:serviceBus.Unicast.UnicastBus.HandleMessage(IBuilder builder,TransportMessage m)中的d:\ BuildAgent-01 \ work \ NServiceBus.Trunk \ src \ unicast \ NServiceBus.Unicast \ UnicastBus.cs:第827行 位于d:\ BuildAgent-01 \ work \ NServiceBus.Trunk \ src \ unicast \ NServiceBus.Unicast \ UnicastBus.cs中的NServiceBus.Unicast.UnicastBus.HandleTransportMessage(IBuilder builder,TransportMessage msg):第1026行 位于d:\ BuildAgent-01 \ work \ NServiceBus.Trunk \ src \ unicast \ NServiceBus.Unicast \ UnicastBus.cs中的NServiceBus.Unicast.UnicastBus.TransportMessageReceived(Object sender,TransportMessageReceivedEventArgs e):第975行 在System.EventHandler`1.Invoke(对象发送者,TEventArgs e) 位于d:\ BuildAgent-01 \ work \ NServiceBus.Trunk \ src \ impl \ unicast \ transport \ NServiceBus.Unicast.Transport.Transactional \ TransactionalTransport.cs中的NServiceBus.Unicast.Transport.Transactional.TransactionalTransport.OnTransportMessageReceived(TransportMessage msg): 409行
我尝试在QA中删除相同的消息来测试场景,但是,QA似乎有效(带有警告异常日志)。
问题 1)为什么会发生这种异常?谁有人在他们的系统中看到过?为什么它只作为WARN记录?我查看了代码,它似乎来自Unicast.cs的catch块,它处理“异常”。
2)有任何解决/深入研究问题的建议吗?