我试图让消费者在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'));
有没有办法获取通道中所有队列的名称并为同一目的编写单个基本消耗?
答案 0 :(得分:0)
即使有可能,也是一个坏主意。
拥有多个队列允许您拥有多个使用者,每个使用者都可以处理特定类型的消息。通过让所有队列都转到同一个消费者,您的代码必须检查消息的类型,以确定如何处理它。
这是RabbitMQ已为您完成的工作的重复,可能会让您进入“选择性消费者”模式 - an anti-pattern in RabbitMQ。
处理AcceptContact
或CancelContact
消息的过程将有所不同。因此,处理这些消息的代码将是不同的。
处理AcceptContact
消息的代码只能从AcceptContact
队列中消耗。让处理CancelContact
消息的代码仅从CancelContact
队列消耗。