RabbitMQ 只监听队列中的第一条消息

RabbitMQ only listens to the first message on a queue

我的 Rabbit 队列出现问题,目前仅对队列中的第一条消息作出反应,之后推送的任何其他消息都将被忽略。

我首先实例化连接并在我的 IQueueConnectionProvider 中声明队列:

var connectionFactory = new ConnectionFactory() { HostName = hostName };
var connection = _connectionFactory.CreateConnection();
var channel = connection.CreateModel();

然后在我的 IQueueListener 中使用 IQueueConnectionProvider 作为依赖项,只有一种方法:

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

}

我的日志文件最终只有一行 "MESSAGE RECEIVED",但是我可以在 Rabbit ui 界面中看到我的其他服务正在将消息推送到该队列。

我在这里遗漏了什么吗?

代码运行良好!已经用我的队列进行了测试,并且能够在日志文件中获得 "MESSAGE RECEIVED" 9 次;因为我的队列中有 9 条消息。

我试过没有这行代码,它运行良好 变量通道 = _queueConnectionProvider.GetQueue();

这是一个愚蠢的错误……又一次。

channel.BasicConsume(queue, false, consumer);

这就是我需要的。我想手动确认我的消息,因此 noAck 需要 false;