0

.Net 4.6.1 Windows サービス内でホストされている NServiceBus 5.2.14 を使用しています。AuditConfig を介してサービスに NServiceBus 監査を追加しました。

<AuditConfig QueueName="AuditService"  />

Sagas を含む Windows サービスの監査を有効にしたとき、いくつかの新しいサブスクリプションがサブスクリプション SQL テーブルに追加されていることに気付きました。次のように:

SubscriberEndpoint                             MessageType
ServiceThatIsPublishingEventTypeA@MyMachine    MyAssembly.MessageTypeA,1.0.147.0
AuditService@MyMachine                         MyAssembly.MessageTypeA,1.0.147.0

Saga サービスで監査を有効にした後、イベントを公開している (Saga がサブスクライブしている) サービスは、それ自体への再帰的なサブスクリプションを取得するようです。

メッセージが処理されると、コピーが正常に監査キューにプッシュされます。

ただし、私が抱えている問題は、メッセージのコピーがServiceThatIsPublishingEventTypeA.Errorキューにプッシュされ、ログに例外が発生することです。

例外は次のとおりです。

System.InvalidOperationException: No handlers could be found for message  type: MyAssembly.MessageTypeA
 at NServiceBus.LoadHandlersBehavior.Invoke(IncomingContext context, Action next) in  C:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Unicast\Behaviors\LoadHandlersBehavior.cs:line 29
at NServiceBus.BehaviorChain`1.InvokeNext(T context) in C:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 107
at   NServiceBus.BehaviorChain`1.&lt;&gt;c__DisplayClass4_0.&lt;InvokeNext&gt;b__0() in  C:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 94

これは、ServiceThatIsPublishingEventTypeAサービス内にMyAssembly.MessageTypeAイベントのハンドラーがない(これらのイベントを発行するだけである) ため、理にかなっていますが、監査によってこのサブスクリプションが追加されています。

私の質問は次のとおりです。その再帰サブスクリプションは正しいですか? サガを介してトラフィックを監査する正しい方法は何ですか (エラーが発生するのを回避します)?

ご協力いただきありがとうございます

4

1 に答える 1

1

エンドポイントは、アセンブリ スキャンで検出したイベントを自動サブスクライブしていると思います。自動サブスクライブを無効にしてみてください。

==編集

github でコードを確認した後、機能するバージョンのプル リクエストを作成しました。主な問題は、監査コンポーネントが監査チャネル経由で受信したサブスクリプション メッセージを処理していたことです...

また、いくつかのマイナーな冗長コードをクリーンアップしました

于 2016-04-21T19:18:16.597 に答える