Я использую основной клиент 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?