【问题标题】:RabbitMQ Single Consumer, consuming messages from Multiple QueuesRabbitMQ 单消费者,消费来自多个队列的消息
【发布时间】:2018-02-20 17:30:14
【问题描述】:

在我的应用程序中,我有一个将消息发布到多个队列的系统。例如,我有 3 个 RabbitMQ 队列,消息被发布到这 3 个队列。目前,这 3 个队列有 3 个消费者。现在我需要进行修改,并且我希望两个队列有一个消费者。我们可以为多个队列使用一个订阅者吗?这如何在 RabbitMQ 中完成?

【问题讨论】:

标签: php rabbitmq amqp


【解决方案1】:

可以做到这一点的一种方法是使用 channel.basicConsume(QUEUE_NAME,,);(在 Java 的情况下,其他语言也有类似的情况)并指定要从哪个队列消耗。因此,在这种情况下,您可以使用两个这样的命令来指定要从中消费的 2 个或更多队列。

如果是 php,代码如下所示:

$channel->basic_consume('QUEUE_NAME', '', false, true, false, false, $callback);

只需为您想要消费的队列调用它即可。

【讨论】:

    【解决方案2】:

    AFAIK 不可能使用同一个通道同时消耗多个队列。至少当我尝试这样做时,它对我不起作用。 此外,跨不同线程使用相同的通道可能是不安全的。

    最好为每个队列创建一个单独的通道来消费。

    Channel 它是足够轻量级的实体——它使用相同的 tcp 连接。通道的主要用途——通过同一个 tcp 连接多路复用不同的查询。

    【讨论】: