0

監査メッセージ ハンドラーがあり、このハンドラー内で例外がスローされた場合は、別のメッセージ ハンドラーによって処理される LogMessageInputQueue にログ メッセージを送信する必要があります。

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

_bus.Send(new LogFatalMessage(ex));

例外はスローされませんが、メッセージは LogMessageInputQueue に表示されず、単に消えるようです...

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

4

1 に答える 1

1

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

_bus.Send(new LogFatalMessage(ex)) の後、元のエラーを再スローします。これにより、NServiceBus はトランザクションをロールバックし、LogMessageInputQueue からメッセージを削除します。

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

using (var ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    _bus.Send(new LogFatalMessage(ex));
    ts.Complete();
}
于 2012-05-03T13:23:27.653 に答える