0

はい、このサブスクリプション 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});});

しかし、事前バスの消費からのコードを見ると、工場から作成されたコードを消費し、コンテナから読み取らないため、登録を尊重していません。これが根本的な原因だと思います。

4

1 に答える 1