【问题标题】:Best approach to read messages in a queue in rabbitmq in c#在c#中读取rabbitmq队列中消息的最佳方法
【发布时间】:2018-12-19 12:52:31
【问题描述】:

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

【问题讨论】:

    标签: c# .net rabbitmq message-queue amqp


    【解决方案1】:

    我相信您正在寻找的是EventingBasicConsumer。在底层,这个消费者所做的是操作一个运行循环的后台线程,将任何消息插入到一个临时阻塞队列中。然后,一个单独的线程将阻塞队列中的每条消息作为一个事件分派给消费者。

    有关详细信息,请参阅.net API guide

    【讨论】:

      猜你喜欢
      • 2016-08-22
      • 2013-05-17
      • 1970-01-01
      • 2012-04-21
      • 2017-04-09
      • 2013-08-09
      • 1970-01-01
      • 2013-12-18
      • 2018-08-10
      相关资源
      最近更新 更多