1

Redisからのメッセージを処理するWebアプリとバックグラウンドサービスがあります。ただし、Webアプリケーションをシングルトンとして構成する必要があるかどうかはわかりませんRedisMqServer(IoCコンテナーとしてNinjectを使用しています)。来る各リクエストは、バックグラウンドサービス(一方向)にメッセージを送信する必要がありますが、リクエストごとまたはアプリケーションごとにインスタンス化する必要があるかどうかはわかりません。

コンテナは次のように構成されていると思いました。

var clientManager = new PooledRedisClientManager();
var mqHost = new RedisMqHost(clientManager);

Bind<IMessageProducer>()
    .ToMethod(_ => mqHost.MessageFactory.CreateMessageProducer())
    .InRequestScope();

またはRedisMqHost/RedisMqServer、メッセージが一方向の場合は必要ないのでしょうか。したがって、構成を次のように減らします。

var clientManager = new PooledRedisClientManager();

Bind<IMessageProducer>()
    .ToMethod(_ => new RedisMessageProducer(clientManager))
    .InRequestScope();
4

1 に答える 1

1

IMessageServiceサービスがホストに直接アクセスする必要がない場合は、実際に登録する必要はありません。しかし、それを使用することになった場合は、はい、シングルトンとして登録する必要があります。

登録が必要なのは。だけですIMessageFactory。この場合、 RequestScopeはNinjectのデフォルトのTransientScopeと同じです。これは、RequestScopeが使用されている場合、Serviceクラスでリクエストごとに1回だけ解決されるためです。

IMessageFactory基本サービスで遅延ロードするIMessageProducerために使用されるため、次の方法でサービスにメッセージを公開できます。

base.MessageProducer.Publish(new RequestDto());

注:単一のバックグラウンドスレッドですべてのメッセージRedisMqHostを処理するコードで使用しています。使用するように変更すると、メッセージタイプごとにバックグラウンドスレッドが作成され、さまざまなメッセージの処理を並行して実行できるようになります。RedisMqServer

于 2012-11-21T18:11:04.573 に答える