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');
我需要的重要事情 - 即使消费者离线,也不要丢失消息。
解决方案
RabbitMQ 不支持通配符队列名称。但是,它确实支持Topic Exchanges,这实际上为您提供了相同的东西。
在此拓扑下,您将使用已在使用的路由密钥进行发布,但您将发布到主题交换器(有一个名为 的默认交换器amq.topic
,或者您可以声明自己的交换器)。然后,为订阅者创建队列。最后,您使用您尝试用于订阅的通配符路由机制将队列绑定到主题交换。
推荐阅读
- typescript - 打字稿冗余条件
- c# - 表单大小和比例错误
- android - 调用 onAddStream() 时不加载远程视频
- c++ - 在 C++ 中查找立方根的算法
- azure-devops - Azure DevOps 多仓库管道
- python - 如何使用 r 或 python 在 google sheet 中编写公式?
- security - 如何禁用对 3DES 密码套件的 TLS/SSL 支持?
- pyspark - 在 python 代码中添加 spark 命令的位置
- mysql - Laravel 7 SQLSTATE[HY000] [2002] 没有这样的文件或目录
- javascript - 是否有应用程序脚本功能将活动仪表板中存在的查看器信息导出到单独的 GSheet 中?