我使用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中发布了问题。