c# - RabbitMQ 事件处理基本消费者

标签 c# rabbitmq

查看来自 Rabbit MQ 站点的消费者示例代码...

var factory = new ConnectionFactory() { HostName = "localhost" };
    using(var connection = factory.CreateConnection())
    using(var channel = connection.CreateModel())
    {
        channel.QueueDeclare(queue: "hello",
                             durable: false,
                             exclusive: false,
                             autoDelete: false,
                             arguments: null);

        var consumer = new EventingBasicConsumer(channel);
        consumer.Received += (model, ea) =>
        {
            var body = ea.Body;
            var message = Encoding.UTF8.GetString(body);
            Console.WriteLine(" [x] Received {0}", message);
        };
        channel.BasicConsume(queue: "hello",
                             autoAck: true,
                             consumer: consumer);

        Console.WriteLine(" Press [enter] to exit.");
        Console.ReadLine();
    }

最初看起来消息是按顺序 1 接 1 从队列中出来的,并由 Received 部分中的代码连续处理。

但是我现在看到的结果表明它们可能按顺序 1 接 1 地关闭,但是同时处理,这是正确的吗?

问候

汤姆

最佳答案

使用 RabbitMQ 可以控制应通过调用并发处理的消息数:

channel.BasicQos(0, <MaxConcurrentConsumerThreads>, false);

因此,如果时间顺序很重要,请调用 channel.BasicQos(0, 1, false);确保一次只处理 1 条消息。

关于c# - RabbitMQ 事件处理基本消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57411153/

相关文章:

java - 为不可根消息创建队列

c# - 在 WPF 中将 XML 绑定(bind)到 Treeview 的简单方法

sockets - RabbitMQ channel 和连接

java - 我们能否拥有类似于 RabbitMq 的 Apache Kafka 强大的路由能力?

php - PHP 无状态 Web 应用程序中的持久多节点事件

javascript - 我在 Mac 上使用 RabbitMQ for Node.js 时遇到错误

c# - 如何从一维 int 数组返回数字网格?

c# - C# 中的 Java MessageDigest 类

c# - Windows Mobile - Attach on call 开始和录制通话

c# - 将 C/C++ 结构转换为 C#.Net CF WinCE