RabbitMQ.Client: повторно использовать IModel для нескольких EventingBasicConsumer - PullRequest
0 голосов
/ 25 мая 2018

Я использую официальный клиент кролика для .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: в 1-м случае есть 20 потоков, созданных RabbitMQ.Client с именем вроде WorkPool-Session # 1: Соединение (guid-here), amqp: //1.1.1.1:5672, во 2-м случае - только одна такая тема.

ОБНОВЛЕНИЕ : Размещен вопрос в официальной группе Google rabbitmq .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...