RabbitMQ を介した Mass Transit で Castle Windsor Integration を機能させることができないようです。ウィンザーを写真に紹介するまで、すべてがうまく機能していました. Castle.Windsor 3.2 と MassTransit.WindsorIntegration 2.9 を参照し、アプリケーション内で使用するコンテナーを構成しました。次の方法で MassTransit Consumers を登録しています。
Container.Register(..., Types.FromThisAssembly().BasedOn<IConsumer>());
この行の実行後にコンテナをデバッグして調べると、他のすべてのコンポーネントとともにすべてのコンシューマが正常に登録されていることがわかります。次に、サービス バスを初期化して登録する次のコードがあります。
var serviceBus = ServiceBusFactory.New(sbc =>
{
sbc.UseRabbitMq();
sbc.ReceiveFrom(Config.ServiceBusEndpoint);
sbc.Subscribe(sc => sc.LoadFrom(Container));
});
Container.Register(Component.For<IServiceBus>().Instance(serviceBus));
LoadFrom(IWindsorContainer container)
MassTransit.WindsorIntegration が提供する拡張メソッドを使用しています。
私がこれまでに見つけたすべての例はここで終わりであり、これがあなたがしなければならないすべてであることを示しています。残念ながら、コンシューマーが呼び出されることはなく、メッセージがキューに積み上げられます (最終的にはタイムアウトになり、エラー キューに移動します)。コンシューマ キューにメッセージがまったく表示されているという事実 (+ RabbitMQ 管理ツールを介してキューにバインドされている単一のコンシューマが表示されます) は、コンシューマがおそらく適切にサブスクライブされていることを示しています。問題があります。
Windsor と MassTransit の NLog ログを追加しましたが、ログにエラーは表示されません。この時点でトラブルシューティングをどのように進めればよいかわかりません。何か案は?
また、このアプリケーションは現在、開発に Topshelf を使用する単なるコンソール アプリケーションです。最終的には、Windows サービスとしてインストールされます。関係あるかどうかわかりませんが、念のため書いておきます。
アップデート
テストとして、非常に単純なテスト メッセージを処理するためのパラメーターのないコンストラクターを持つ非常に単純な Consumer を作成しました。このコンシューマーは正常に呼び出されました! ただし、「実際の」コンシューマーには、コンストラクターを介して注入する必要がある依存関係があります。コンテナがこれらを解決してくれることを期待していましたが、どうやら何らかの問題が発生しているようです。それについてログに何も表示されないのは奇妙です。乞うご期待...