我开始学习RabbitMQ。我在网上找到了一些关于如何使用队列消息的教程。但我想知道如何最好的方法。今天我将在计时器中使用一个简单的代码,如果存在,它将返回一个消息并做一些工作。另一个例子是使用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);
}
}
}
1条答案
按热度按时间gopyfrb31#
我相信你正在寻找的是
EventingBasicConsumer
。在幕后,这个消费者所做的是操作一个运行循环的后台线程,将任何消息插入一个临时阻塞队列。然后,一个单独的线程将阻塞队列中的每条消息作为事件分派给使用者。请参阅.net API guide以了解更多详细信息。