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();