首页 > 解决方案 > 如何在 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');

我需要的重要事情 - 即使消费者离线,也不要丢失消息。

标签: phprabbitmq

解决方案


RabbitMQ 不支持通配符队列名称。但是,它确实支持Topic Exchanges,这实际上为您提供了相同的东西。

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


推荐阅读