【问题标题】:NServiceBus: What causes "Failed raising 'finished message processing' event."?NServiceBus:是什么导致“未能引发'完成的消息处理'事件。”?
【发布时间】:2012-02-25 15:49:30
【问题描述】:

有时当 NServiceBus 接收到一条消息时,它会失败并出现以下异常。这会导致 NServiceBus 重试(直到它配置的重试限制)。有时,其中一次重试会导致消息被成功处理,但所有重试通常都会失败并出现相同的异常。在这种情况下,当所有重试失败时,消息会按预期路由到错误队列。

我的问题是...... 首先是什么导致了这个异常?它似乎与我的消息处理程序代码无关,因为我的代码没有出现在堆栈跟踪中。

  • NServiceBus 版本:2.6.0.1504
  • 操作系统:Windows Server 2003
  • 处理程序代码面向 .NET 3.5 或更早版本

这是完整的异常消息和堆栈跟踪:

NServiceBus.Unicast.Transport.Msmq.MsmqTransport [(null)] - Failed raising 'finished message processing' event.  System.Messaging.MessageQueueException: Cannot enlist the transaction.
     at System.Messaging.MessageQueue.SendInternal(Object obj, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
     at System.Messaging.MessageQueue.Send(Object obj, MessageQueueTransactionType transactionType)
     at NServiceBus.Unicast.Transport.Msmq.MsmqTransport.SendMsmqMessage(Message m, String destination)
     at NServiceBus.Unicast.Transport.Msmq.MsmqTransport.Send(TransportMessage m, String destination)
     at NServiceBus.Unicast.UnicastBus.SendReadyMessage(Boolean startup)
     at NServiceBus.Unicast.UnicastBus.TransportFinishedMessageProcessing(Object sender, EventArgs e)
     at NServiceBus.Unicast.Transport.Msmq.MsmqTransport.OnFinishedMessageProcessing()

【问题讨论】:

  • 我们最终发现这是由于先前存在的数据库争用问题造成的。当我们的处理程序代码遇到问题时,它抛出了一个似乎过早结束 DTC 事务的异常。当 MSMQ 无法登记不可用事务时,这会导致上述错误。关于为什么我们的代码一开始没有使这一点更明显的(令人尴尬的)细节,我将不再赘述。感谢您的帮助!

标签: msmq nservicebus


【解决方案1】:

我在您的堆栈跟踪中看到了 NServiceBus.Unicast.UnicastBus.SendReadyMessage(Boolean startup) 方法。

这告诉我您的端点已连接到分发服务器。在所有消息处理程序完成后,连接到分发器的端点会将 ReadyMessage 发送回分发器的控制队列,以说“我完成了这项工作。请发送更多!”

这应该与您的其他工作在同一事务中发生,但显然 MSMQ 发送在该事务中登记时遇到问题。这可能表明 DTC 存在问题。知道您在消息处理程序中还针对同样在事务中登记的该消息类型还进行了哪些操作会很有趣。您没有手动提交或回滚任何内容吗?

【讨论】:

  • 感谢您的帮助。不,我们没有手动做任何与事务相关的事情(提交或回滚)。我目前正在研究 DTC,看看它是否/如何起作用。我会再次更新我的发现。
  • 接受这个作为答案,因为它 1) 是唯一的答案 ;-) 和 2) 提供了一些非常有用的信息。
猜你喜欢
  • 2010-11-15
  • 1970-01-01
  • 2011-09-15
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多