RabbitMQ прослушивает только первое сообщение в очереди
у меня проблема с моими очередями кролика, которые в настоящее время реагируют только на первое сообщение в очереди, после этого любые другие сообщения, которые были отправлены, игнорируются.
Я начинаю с создания экземпляра соединения и объявления очереди в моем IQueueConnectionProvider:
var connectionFactory = new ConnectionFactory() { HostName = hostName };
var connection = _connectionFactory.CreateConnection();
var channel = connection.CreateModel();
этот IQueueConnectionProvider затем используется в моем IQueueListener как зависимость только с одним методом:
public void ListenToQueue(string queue)
{
var channel = _queueConnectionProvider.GetQueue();
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
string path = @"d:debug.log.txt";
File.AppendAllLines(path, new List<string>() {"MESSAGE RECEIVED", Environment.NewLine });
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
channel.BasicAck(ea.DeliveryTag, false);
};
channel.BasicConsume(queue, true, consumer);
}
мой файл журнала заканчивается только одной строкой "сообщение Получено", однако я могу видеть в интерфейсе пользовательского интерфейса Rabbit, что мои другие службы просто толкают сообщения в эту очередь.
Я что-то упускаю?
2 ответов
Это была глупая ошибка... еще раз.
channel.BasicConsume(queue, false, consumer);
Это было то, что мне нужно. Я хочу вручную подтвердить свои сообщения, поэтому noAck
должен быть false
;
код работает отлично! Протестировали с моей очередью и смогли получить "сообщение получено" 9 раз в файле журнала; так как у меня было 9 сообщений в моей очереди.
Я пробовал без этой строки кода, и он работал нормально var channel = _queueConnectionProvider.GetQueue();