我的 Rabbit 队列有问题,目前只对队列中的第一条消息作出 react ,之后推送的任何其他消息都将被忽略。
我首先实例化连接并在我的 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);
}
我的日志文件最终只有一行“收到的消息”,但是我可以在 Rabbit ui 界面中看到我的其他服务正在将消息推送到该队列。
我在这里遗漏了什么吗?
最佳答案
这是一个愚蠢的错误……又一次。
channel.BasicConsume(queue, false, consumer);
这正是我所需要的。我想手动确认我的消息,因此 noAck
需要为 false
;
关于c# - RabbitMQ 只监听队列中的第一条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34603150/