Я искал StackOverflow и не думаю, что другие проблемы, связанные с несколькими потребителями, совпадают с тем, что я пытаюсь.
У меня есть служба Windows, которая запускается и регистрируется для отслеживания двух разных RabbitMQ очереди.Если я регистрирую его только для прослушивания 1 очереди, он работает нормально.Когда я пытаюсь заставить его слушать обе очереди, работает только второй слушатель.
var responseConsumer = new EventingBasicConsumer(_responseChannel);
responseConsumer.Received += (model, ea) =>
{
var message = Encoding.UTF8.GetString(ea.Body);
// PROCESS MESSAGE
IssuerProcessor processor = new IssuerProcessor("Processed Message(" + pause + "ms) : ");
Thread.Sleep(pause);
var ret = processor.ProcessResponseMessage();
Console.WriteLine("Processed message: " + ret);
ulong deliveryTag = ea.DeliveryTag;
_responseChannel.BasicAck(deliveryTag, false);
Console.WriteLine("ACK RESPONSE Delivery Tag (" + deliveryTag.ToString() + "): " + ret);
}; // end requestConsumer.Received
_responseChannel.BasicConsume(queue: RESPONSE_QUEUE, autoAck: autoAck, consumer: responseConsumer);
Другой потребитель выглядит так же, как и этот, но он слушает другую очередь, используя то же соединение, сдругой канал.
Вот инициализация для обоих:
_requestChannel = _connection.CreateModel();
_responseChannel = _connection.CreateModel();
_requestChannel.ExchangeDeclare(EXCHANGE, ExchangeType.Direct, true, false, null);
_requestChannel.QueueDeclare(queue: REQUEST_QUEUE, durable: true, exclusive: false, autoDelete: false, arguments: null);
_requestChannel.BasicQos(0, 1, false);
_requestChannel.QueueBind(REQUEST_QUEUE, EXCHANGE, REQUEST_QUEUE, null);
_responseChannel.ExchangeDeclare(EXCHANGE, ExchangeType.Direct, true, false, null);
_responseChannel.QueueDeclare(RESPONSE_QUEUE, durable: true, exclusive: false, autoDelete: false, arguments: null);
_responseChannel.BasicQos(0, 1, false);
_responseChannel.QueueBind(RESPONSE_QUEUE, EXCHANGE, RESPONSE_QUEUE, null);