【问题标题】:RabbitMQ: Is it possible to have multiple channels associated with the same queue?RabbitMQ:是否可以有多个通道与同一个队列关联?
【发布时间】:2021-06-27 18:42:46
【问题描述】:

我是 RabbitMQ 的新手。我理解通道就像一个连接的抽象(作为真实连接的一部分),一个通道与一个队列相关联。

我知道多个队列可以使用同一个通道。但我想知道多个消费者是否可以从同一个队列异步消费消息,以及在这种情况下每个消费者是否都有自己的专用通道。

具体来说,我理解以下是可能的:

                     / queue 1 - consumer 1 (via channel 1)
Producer -> Exchange - queue 2 - consumer 2 (via channel 2)
                     \ queue 3 - consumer 3 (via channel 3)

但是下面的呢?

                               / consumer 1 (via channel 1)
Producer -> Exchange - queue 1 - consumer 2 (via channel 2)
                               \ consumer 3 (via channel 3)

我问这个的原因是我想通过一个频道池(或多个频道)加速我的消费。但是,我想不出一种方法来做到这一点......

【问题讨论】:

    标签: java rabbitmq


    【解决方案1】:

    每个连接可以使用多个通道。

    Channel channel = connection.createChannel();
    

    不要在线程之间共享通道。

    当一个频道不再需要时,它应该被关闭。

    channel.close()
    

    如果您使用的是弹簧:

    @RabbitListener(queues = "queue-name", concurrency = "4")
    public void listener(Object requestObject) {
        // process
    }
    

    【讨论】:

    • 感谢您的回答。你能多谈谈“线程”吗?根据this 教程,默认情况下,当消费者处理来自队列的消息时使用多线程。换句话说,在DeliverCallback 内部,它已经是多线程的了。所以我不太清楚你所说的不在线程之间共享频道是什么意思
    猜你喜欢
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2012-06-14
    相关资源
    最近更新 更多