如何在RabbitMQ中使用通配符队列名称发送消耗任务?

时间:2018-08-13 16:45:14

标签: php rabbitmq

我有发布者,可以将信息发送到RabbitMQ中的不同队列中

$this->_channel->queue_declare('qwe.w', FALSE, TRUE, FALSE, FALSE, FALSE);
$this->_channel->queue_declare('qwe.q', FALSE, TRUE, FALSE, FALSE, FALSE);
$this->_channel->basic_publish(
    $message, 
    '', 
    'qwe.q'
);
$this->_channel->basic_publish(
    $message, 
    '', 
    'qwe.w'
);

如何使用通配符队列名称使用它们? 像这样的东西(下面的代码不起作用)

$this->_channel->basic_consume('qwe.#', '', FALSE, TRUE, FALSE, FALSE, 'function_name');

我需要的重要内容-即使消费者处于离线状态也不要丢失消息。

1 个答案:

答案 0 :(得分:0)

RabbitMQ不支持通配符队列名称。但是,它确实支持Topic Exchanges,可以有效地为您提供相同的功能。

在此拓扑下,您将使用已经使用的路由密钥进行发布,但是将发布到主题交换(有一个名为amq.topic的默认交换,也可以声明自己的交换)。然后,为订户创建队列。最后,您使用尝试用于订阅的通配符路由机制将队列绑定到主题交换。