在 c# 中的 rabbitmq 中读取队列中消息的最佳方法
Best approach to read messages in a queue in rabbitmq in c#
我开始学习 RabbitMQ。我找到了一些关于如何使用队列消息的互联网教程。但我想知道如何最好地解决这个问题。今天,我在计时器中使用了一个简单的代码,return 一条消息(如果存在)并做一些工作。其他示例使用 while true 循环,如下面的代码。 rabbitmq 中是否存在某些功能来注册在特定队列中发布消息时触发的方法回调?如果有其他方法,我不想检查是否存在并在 while true 循环中获取消息。谢谢
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("hello", false, false, false, null);
var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("hello", true, consumer);
Console.WriteLine(" [*] Waiting for messages." +
"To exit press CTRL+C");
while (true)
{
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
}
}
}
相信您要找的就是EventingBasicConsumer
。在幕后,这个消费者所做的是运行一个运行循环的后台线程,将任何消息插入一个临时阻塞队列。然后,一个单独的线程将阻塞队列中的每条消息作为事件发送给消费者。
有关详细信息,请参阅 .net API guide。
我开始学习 RabbitMQ。我找到了一些关于如何使用队列消息的互联网教程。但我想知道如何最好地解决这个问题。今天,我在计时器中使用了一个简单的代码,return 一条消息(如果存在)并做一些工作。其他示例使用 while true 循环,如下面的代码。 rabbitmq 中是否存在某些功能来注册在特定队列中发布消息时触发的方法回调?如果有其他方法,我不想检查是否存在并在 while true 循环中获取消息。谢谢
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("hello", false, false, false, null);
var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("hello", true, consumer);
Console.WriteLine(" [*] Waiting for messages." +
"To exit press CTRL+C");
while (true)
{
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
}
}
}
相信您要找的就是EventingBasicConsumer
。在幕后,这个消费者所做的是运行一个运行循环的后台线程,将任何消息插入一个临时阻塞队列。然后,一个单独的线程将阻塞队列中的每条消息作为事件发送给消费者。
有关详细信息,请参阅 .net API guide。