2011-08-03 41 views
5

我有一個示例NServiceBus應用程序來測試水..一切都很順利,發送和處理工作正常。NServiceBus消息處理程序不會出現'錯誤'隊列異常

我有意在特定的消息處理程序中拋出一個異常來查看會發生什麼 - 但沒有。該異常被正確地記錄到控制檯,但是消息被從隊列中取出,並且如我所預期的那樣放置在錯誤隊列中的不是。而且,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(); 

我錯過了什麼嗎?

回答

5

我修改了引導程序代碼,包括

.IsTransactional(true) 
總線上的配置

,現在它是工作!看來非事務性消息是一次性的。說得通!

+0

我的第一本能就是告訴你讓你的隊列成爲事務性的。穿過它! –

1

您是否運行Windows Server 2008?如果是這樣,您可以在事件查看器中的應用程序事件日誌 - >窗口 - > MSMQ - End2End下找到事件日誌。這將記錄您的機器上MSMQ子系統採取的每一個動作。

我猜測NSB試圖將消息發送到錯誤隊列。但是,真正發生的是您計算機上的MSMQ子系統已經使用了該消息,但出於某種原因無法將其發送到錯誤隊列。

我會在MSMQ日誌中看看發生了什麼。

+0

我正在運行Win7,但是我在'應用程序和服務日誌\ MSMQ \ End2End'中啓用了日誌,它提供了一些有趣的數據,但根本沒有列出錯誤隊列。它確實顯示發送/接收到SiteServer1的日誌 - 但成功的「處理程序」和處理程序完全相同的日誌 –

相關問題