2012-05-03 13 views
0

監査メッセージハンドラがあり、このハンドラ内に例外がスローされた場合、別のメッセージハンドラによって処理されるLogMessageInputQueueにログメッセージを送信したいと考えています。NServiceBusホストからメッセージを送信する

NServiceBusホストプロセス内から新しいメッセージを送信することはできますか? AuditMessageHandlerは、コンストラクタでのIBusハンドラを受け入れますが、

_bus.Send(new LogFatalMessage(ex)); 

を呼び出すときに例外がスローされませんが、メッセージがLogMessageInputQueueには表示されず、単に消えているようだ...

すべてのハンドラとキューは同じマシン上にあります。

答えて

1

OKは、すべて自分でこれを考え出した:)

を_bus.Send(新しいLogFatalMessage(EX))の後、我々は元のエラーを再度投げる、これは、そのトランザクションをロールバックしてからメッセージを削除するにはNServiceBusを引き起こしLogMessageInputQueue

独自のトランザクションで_bus.Send()をラップすることで、NServiceBusトランザクションのロールバックを停止し、LogMessageをキューから削除します。

using (var ts = new TransactionScope(TransactionScopeOption.RequiresNew)) 
{ 
    _bus.Send(new LogFatalMessage(ex)); 
    ts.Complete(); 
} 
+1

v3を使用している場合は、IManageMes​​sageFailuresインターフェイスを実装して例外処理作業を実行します。 –

+0

@Adam私たちはv3を使用していて、そのインターフェースについて知らなかったので、それを見てみましょう –

関連する問題