我需要从 IIS 中托管的 C# WCF Web 服务中调用 RabbitMQ RPC 服务。我们的工作正常,但作为一名优秀的小士兵,我正在阅读 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
}