在C#中读取rabbitmq队列中消息的最佳方法

o7jaxewo  于 2023-10-20  发布在  RabbitMQ
关注(0)|答案(1)|浏览(174)

我开始学习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);
        }
    }
}
gopyfrb3

gopyfrb31#

我相信你正在寻找的是EventingBasicConsumer。在幕后,这个消费者所做的是操作一个运行循环的后台线程,将任何消息插入一个临时阻塞队列。然后,一个单独的线程将阻塞队列中的每条消息作为事件分派给使用者。
请参阅.net API guide以了解更多详细信息。

相关问题