RabbitMQ.Client:为少数EventingBasicConsumer

时间:2018-05-25 14:03:46

标签: c# .net multithreading rabbitmq

我使用official rabbit client for .net。我在20实例中有rabbitmq个队列。如果我像这样为每个队列消费者创建IModel

for(int i = 0; i < 20; i++)
{
   var model = _connection.CreateModel();
   var cns = new EventingBasicConsumer(model);
   ch.BasicConsume("queue_" + i, false, cns);
   ...
}

应用程序使用37个线程。

如果我为所有消费者重复使用相同的IModel

var model = _connection.CreateModel();
for(int i = 0; i < 20; i++)
{   
   var cns = new EventingBasicConsumer(model);
   ch.BasicConsume("queue_" + i, false, cns);
   ...
}

应用程序使用18个线程。

减少应用程序线程的数量是否安全且好的方法?

我使用Process.GetCurrentProcess().Threads.Count计算线程数。

我检查了dottrace中的线程:在第一种情况下,RabbitMQ.Client创建了20个线程,其名称类似于 WorkPool-Session#1:Connection(guid-here),amqp:/ /1.1.1.1:5672 ,在第二种情况下 - 只有一个这样的线程。

更新:在official rabbitmq google group中发布了问题。

0 个答案:

没有答案