RabbitMQ只侦听队列

时间:2016-01-05 02:12:54

标签: c# rabbitmq

我的Rabbit队列存在问题,目前只响应队列中的第一条消息,之后被忽略的任何其他消息都被忽略。

我开始实例化连接并在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);

}

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

这里有什么我想念的吗?

2 个答案:

答案 0 :(得分:4)

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

channel.BasicConsume(queue, false, consumer);

这就是我所需要的。我想手动确认我的邮件,因此noAck需要false;

答案 1 :(得分:0)

代码工作正常!已经测试了我的队列,并且能够得到&#34; MESSAGE RECEIVED&#34;在日志文件中9次;因为我队列中有9条消息。

我试过没有这行代码,它工作正常 var channel = _queueConnectionProvider.GetQueue();