Как дорого это создать новый экземпляр IModel в RabbitMQ - PullRequest
0 голосов
/ 03 июля 2018

Я использую основной клиент RabbitMQ .Net, и у меня много потребителей, использующих одно и то же сообщение.

Потребители не должны ждать окончания друг друга, поэтому я обедаю каждый в новой теме.

Я регистрировал IModel как синглтон в IOC

 services.AddSingleton(mb =>
        {
            var factory = new ConnectionFactory
            {
                HostName = HostName,
                UserName = Username,
                Password = Password,
                VirtualHost = VirtualHost
            };
            var connection = factory.CreateConnection();
            return connection.CreateModel();
        }); 

но если я запускаю свое приложение и очередь уже содержит сообщения, я получаю следующее исключение:

"Конвейер запросов запрещен"

Я искал проблему, и мне кажется, что я не могу передать один и тот же экземпляр IModel нескольким потокам.

Чтобы преодолеть проблему, у меня есть два решения: либо зарегистрировать IModel как временный, либо использовать lock всякий раз, когда я использую экземпляр IModel.

мой вопрос: насколько дорого иметь новый экземпляр IModel всякий раз, когда IModel необходим, следовательно, при каждом запросе IModel будет инициироваться новое соединение с RabbitMQ?

Стоит ли использовать блокировку всякий раз, когда используется экземпляр IModel?

1 Ответ

0 голосов
/ 03 июля 2018

как дорого иметь новый экземпляр IModel, когда IModel необходимо

Я вполне уверен, что производительность подходит для вашего приложения. Тесты можно запустить, если вам нужно что-то доказать.

... следовательно, новое соединение с RabbitMQ будет инициироваться каждый раз ИМодель запрашивается?

Почему вы думаете, что это так? Вы запускали Wireshark через порт 5672, чтобы увидеть, что на самом деле происходит, когда вызывается CreateModel?

Оповещение о спойлере: CreateConnection - это то, что создает соединение, а CreateModel открывает канал для этого соединения. Вы правы, что вы не можете совместно использовать IModel экземпляров среди потоков, поэтому создайте по одному на поток. Это будет достаточно быстро!

Команда RabbitMQ отслеживает список рассылки rabbitmq-users и только иногда отвечает на вопросы по StackOverflow.

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