RabbitMQ单个消费者,从多个队列中消耗消息



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

这可以做到的一种方法是使用 channel.basicconsume(queue_name ,,(; (如果使用Java,其他语言的情况也相似((和指定要消耗的队列。因此,在这种情况下,您可以使用两个这样的命令指定要使用的2个或多个队列。

在PHP的情况下,代码看起来像这样:

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

只需将其称为您想要的多个队列。

afaik,不可能使用相同的通道同时消耗几个队列。至少当我尝试这样做时,它对我不起作用。同样,在不同的线程上使用相同的通道可能是不安全的。

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

通道它是足够的轻量级实体 - 它使用相同的TCP连接。通道的主要目的 - 通过相同的TCP连接多路复用不同的查询。

最新更新