RabbitMq 单个消费者与多个队列



我想为多个队列创建单个消费者(通用侦听器(。使用者应侦听多个队列。

让我们看看例子

        channel.ExchangeDeclare(exchange: "logs", type: "fanout");
        var queueName = "QeueueName.Instance1";
        channel.QueueBind(queue: queueName,
                          exchange: "logs",
                          routingKey: "");
        Console.WriteLine(" [*] Waiting for logs.");
        var consumer = new EventingBasicConsumer(channel);
        consumer.Received += (model, ea) =>
        {
            var body = ea.Body;
            var message = Encoding.UTF8.GetString(body);
            Console.WriteLine(" [x] {0}", message);
        };

我想将消费者与动态队列编号相关联,他们会 增加时间,以便我将如何将消费者与将来创建的队列相关联。我已经为此创建了一个窗口服务,所以我必须循环所有队列并与消费者关联,对于将来创建的队列,我应该将它们添加到消费者队列列表中。

当我第一次阅读您的问题时,我认为您不能将一个消费者绑定到多个队列,但我刚刚尝试了一下,它工作正常:

        ConnectionFactory factory = new ConnectionFactory()
        {
            VirtualHost = "testHost1",
            UserName = "guest",
            Password = "guest",
            Port = 5672,
        };
        var connection = factory.CreateConnection();
        var channel = connection.CreateModel();
        channel.ExchangeDeclare("testExchange1", ExchangeType.Fanout);
        channel.QueueDeclare("testQueue1");
        channel.QueueDeclare("testQueue2");
        channel.QueueBind("testQueue1", "testExchange1", "");
        channel.QueueBind("testQueue2", "testExchange1", "");
        var consumer1 = new EventingBasicConsumer(channel);
        consumer1.Received += Consumer1OnReceived;
        channel.BasicConsume("testQueue1", false, consumer1);
        channel.BasicConsume("testQueue2", false, consumer1);

请注意,您的代码不包括对 BasicConsume() 的调用。没有它,您的消费者将不会收到任何东西。

最新更新