はい、このサブスクリプション ID で自動サブスクライバー機能と通常のサブスクライブ方法を使用できますが、このソリューションは RMQ キューとエクスチェンジでは少し見苦しくなります。メッセージを追跡して分析するのは困難でした。
私は事前バスを使用し、独自の交換とキューを作成しました。公開には成功しましたが、消費部分は少しがっかりです。現在、この方法を使用しています。
IAdvanceBus = bus.Advanced.Consume(queueName, registration =>
{
registration.Add<MESSAGE1>((message, info) => { ProcessMessage(MESSAGE1) })
registration.Add<MESSAGE2>((message, info) => { ProcessMessage(MESSAGE2) })
registration.Add<MESSAGE3>((message, info) => { ProcessMessage(MESSAGE3) })
registration.Add<MESSAGE4>((message, info) => { ProcessMessage(MESSAGE4) })
registration.Add<MESSAGE5>((message, info) => { ProcessMessage(MESSAGE5) });
});
これは良いことですが、リスナーが 100 人いる場合の問題はありますか?
登録タイプIHandlerRegistrationを確認しましたが、ジェネリックのみを使用していますが、ジェネリック以外の方法を使用できますか?
お気に入り :
IAdvanceBus = bus.Advanced.Consume(queueName, registration =>
{
registration.Add(typeof(MESSAGE1), info => { ProcessMessage(MESSAGE1) })
registration.Add(typeof(MESSAGE2), info => { ProcessMessage(MESSAGE2) })
registration.Add(typeof(MESSAGE3), info => { ProcessMessage(MESSAGE3) })
});
このようにして、このメッセージを使用するアセンブリをスキャンできます。
反対側では、バスの構築を介して登録します。
RabbitHutch.CreateBus(connectionString, registeredServices => {
IEasyNetQLogger logger;
MyCustomHandlerCollection myHandlers = myDIContainer.Resolve<IMyHandlers>();
registeredServices.Register<IHandlerCollection>(s =>
{
logger = s.Resolve<IEasyNetQLogger>();
return myHandlers;
});
registeredServices.Register<IHandlerRegistration>(s => myHandlers});});
しかし、事前バスの消費からのコードを見ると、工場から作成されたコードを消費し、コンテナから読み取らないため、登録を尊重していません。これが根本的な原因だと思います。