NServiceBus消息处理程序在异常时不会进入“错误”队列

时间:2011-08-03 15:24:46

标签: error-handling nservicebus

我有一个样本NServiceBus应用程序来测试水域。一切顺利,发送和处理工作正常。

我故意在某个消息处理程序中抛出异常,看看会发生什么 - 但什么都没有。异常被正确记录到控制台,但消息从队列中拉出, NOT 放置在错误队列中,正如我所期望的那样。此外,5次重试也没有发生。这是正确的行为吗?

此外,首次指定时,在启动时正确创建了队列。

服务器的配置和引导代码(处理程序所在的位置在下面)

配置:

<MsmqTransportConfig
  InputQueue="SiteServer1"
  NumberOfWorkerThreads="1"
  MaxRetries="5"
  ErrorQueue="SiteServer1Errors"
/>

的Program.cs:

var bus = NServiceBus.Configure.With()
  .Log4Net()
  .CastleWindsorBuilder(container)
  .XmlSerializer()
  .MsmqTransport()
  .UnicastBus()
    .LoadMessageHandlers()
  .CreateBus()
  .Start();

我在这里遗漏了什么吗?

2 个答案:

答案 0 :(得分:5)

我修改了bootstrapper代码以包含

.IsTransactional(true)

在总线配置上,现在它正在工作!似乎非交易消息是一次性的。有道理!

答案 1 :(得分:1)

您运行的是Windows Server 2008吗?如果是这样,您将在事件查看器中的应用程序事件日志下找到事件日志 - &gt;窗户 - &gt; MSMQ - End2End。这将记录MSMQ子系统在您的计算机上执行的每个操作。

我猜测NSB已经尝试将消息发送到错误队列。但是,真正令人讨厌的是,计算机上的MSMQ子系统已经消耗了该消息,但由于某种原因无法将其传递到错误队列。

我会在MSMQ日志中查看正在发生的事情。