消费者如何在不知道php rabbitmq中的队列名称的情况下同时监听通道中存在的所有队列

时间:2015-08-06 08:59:59

标签: php rabbitmq

我试图让消费者在consumer.php中无名交换中侦听所有队列,但我必须提到队列名称,如下所示:

$this->channel->basic_consume('Cancelcontact', '', false, false, false, false, array($this, 'processMsg'));
$this->channel->basic_consume('Acceptcontact', '', false, false, false, false, array($this, 'processMsg'));
$this->channel->basic_consume('Declinecontact', '', false, false, false, false, array($this, 'processMsg'));

有没有办法获取通道中所有队列的名称并为同一目的编写单个基本消耗?

1 个答案:

答案 0 :(得分:0)

即使有可能,也是一个坏主意。

拥有多个队列允许您拥有多个使用者,每个使用者都可以处理特定类型的消息。通过让所有队列都转到同一个消费者,您的代码必须检查消息的类型,以确定如何处理它。

这是RabbitMQ已为您完成的工作的重复,可能会让您进入“选择性消费者”模式 - an anti-pattern in RabbitMQ

处理AcceptContactCancelContact消息的过程将有所不同。因此,处理这些消息的代码将是不同的。

处理AcceptContact消息的代码只能从AcceptContact队列中消耗。让处理CancelContact消息的代码仅从CancelContact队列消耗。