我有一个样本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();
我在这里遗漏了什么吗?
答案 0 :(得分:5)
我修改了bootstrapper代码以包含
.IsTransactional(true)
在总线配置上,现在它正在工作!似乎非交易消息是一次性的。有道理!
答案 1 :(得分:1)
您运行的是Windows Server 2008吗?如果是这样,您将在事件查看器中的应用程序事件日志下找到事件日志 - &gt;窗户 - &gt; MSMQ - End2End。这将记录MSMQ子系统在您的计算机上执行的每个操作。
我猜测NSB已经尝试将消息发送到错误队列。但是,真正令人讨厌的是,计算机上的MSMQ子系统已经消耗了该消息,但由于某种原因无法将其传递到错误队列。
我会在MSMQ日志中查看正在发生的事情。