2011-08-03 10 views
5

ウォーターをテストするサンプル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(); 

足りませんか?

答えて

5

私はバスの設定上の

.IsTransactional(true) 

が含まれるようにブートストラップコードを修正し、今では働いています!非トランザクションメッセージは使い捨てであるようです。意味をなさない!

+0

私の最初の本能は、キューをトランザクションにするように指示することでした。それをねえ! –

1

Windows Server 2008を実行していますか?そうであれば、イベント・ログはイベント・ビューアーのアプリケーション・イベント・ログ - >ウィンドウ - > MSMQ - End2Endの下にあります。これにより、マシン上のMSMQサブシステムによって実行されたすべてのアクションが記録されます。

私は、NSBがエラーキューにメッセージを送信しようとしていると推測しています。しかし、実際に何が起きているのかは、マシン上のMSMQサブシステムが何らかの理由でメッセージを消費したが、それをエラーキューに配信できなかったことです。

私はMSMQログで何が起こっているのかを調べます。

+0

私はWin7を実行していますが、「アプリケーションとサービスのログ\ MSMQ \ End2End」内のログを有効にしました。これは面白いデータを提供しますが、エラーキューはまったく表示されません。それは、SiteServer1に送受信されたログを表示しますが、成功した「ハンドラ」とハンドラの例外ログと全く同じログ –

関連する問題