IISでホストされているC#WCFWebサービス内からRabbitMQRPCサービスを呼び出す必要があります。これは問題なく動作していますが、私はRabbitMQクライアントのドキュメントを読んでいて、「IModelはスレッド間で共有しないでください」と述べています。
私の理解では、RabbitMQではIModelは実際にはソケット接続です。これは、呼び出しごとに、WCFサービスがIModelを作成し、完了したらそれを破棄する必要があることを意味します。
これは、パフォーマンスとソケットの使用法に関してやや過剰に思えます。私の理解が実際に正しいのか、またはスレッド間でIModelの接続プールを使用するなどの利用可能な他のオプションがあるのか疑問に思います。
どんな提案でもありがたく受け取られるでしょう。以下に私が使用しているコードのサンプルを示します。rabbitMQ接続は実際にはGlobal.asaxで初期化されています。ここにあるだけで、使用法を確認できます。
var connectionFactory = new ConnectionFactory();
connectionFactory.HostName = "SampleHostName";
connectionFactory.UserName = "SampleUserName";
connectionFactory.Password = "SamplePassword";
IConnection connection = connectionFactory.CreateConnection();
// Code below is what we actually have in the service method.
var model = connection.CreateModel();
using (model)
{
model.ExchangeDeclare("SampleExchangeName", ExchangeType.Direct, false);
model.QueueDeclare("SampleQueueName", false, false, false, null);
model.QueueBind("SampleQueueName", "SampleExchangeName", "routingKey" , null);
// Do stuff, like post messages to queues
}