【问题标题】:Multiple RabbitMQ Consumers DotNet Core多个 RabbitMQ 消费者 DotNet Core
【发布时间】:2021-06-25 08:24:08
【问题描述】:

我们有一个应用程序需要有多个消费者来处理同一个查询。数据具有这样的性质,“竞争消费者”不是问题,因为消息可以按任何顺序独立处理。我的问题是,由于 RabbitMQ 有自己的线程管理等,创建多个消费者选择同一队列的消息的最佳方法是什么?看看这个简单消费者的基本示例:

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.ToArray();
        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();
}

我认为需要创建多个 channel.BasicConsume(...) 实例,但最好的方法是什么?使用TaskScheduler 或多线程还是什么?

我可以引入服务层并整理一切,但只需要知道最安全的方法是什么。

到目前为止,我发现的所有方法都不是创建多个消费者,而是在我们的案例中这是一个要求。

【问题讨论】:

  • 为什么不为每个消费者创建一个队列?每个队列可以绑定到一个交换器。
  • RMQ 消息基于连接以循环方式传递,我更愿意同时运行多个消费者实例,以便生成多个连接。我认为'channel.BasicConsume(...)'的多个实例将继续进行单个连接。

标签: c# .net-core rabbitmq


【解决方案1】:

一个简单的方法是,你可以有两个这样的控制台应用程序,然后一起运行它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多