当前位置: 首页 > news >正文

RabbitMQ-消息队列之topic使用

1、安装rabbitmq

怎么安装rabbitmq请查看之前课程,如果已经安装,请略过此步。

2、创建vendor文件夹或是直接采用PHP框架

mkdir vendor

3、进入文件

cd vendor

4、安装php扩展

composer require php-amqplib/php-amqplib

5、进入上级创建topic文件夹

cd ../
mkdir topic

6、进入topic文件并创建生产者php

cd topic
touch publish.php

7、输入topic生产者内容

<?phprequire_once  '../vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;$v_host = 'order';$exc_name ='topic_log';$routing_key = 'goods.warn';$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);$channel = $connection->channel();$channel->exchange_declare($exc_name,'topic',false,false,false);$data = 'this is '.$routing_key.' message';$msg = new AMQPMessage($data,['delivery_mode'=>AMQPMEssage::DELIVERY_MODE_PERSISTENT]);$channel->basic_publish($msg,$exc_name,$routing_key);$channel->close();$connection->close();

8、创建消费者php

touch all.php
touch user.php
touch warn.php

9、输入topic消费者内容

vi all.php
<?phprequire_once  '../vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;$v_host ='order';$exc_name = 'topic_log';$routing_key = '#';$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);$channel = $connection->channel();$channel->exchange_declare($exc_name,'topic',false,false,false);list($queue_name,,) = $channel->queue_declare('',false,false,true,false);$channel->queue_bind($queue_name,$exc_name,$routing_key);$callback = function($msg){echo 'received ' ,$msg->body,"\n";$msg->ack();
};$channel->basic_qos(null,1,null);$channel->basic_consume($queue_name,'',false,false,false,false,$callback);while($channel->is_open()){$channel->wait();
}$channel->close();$connection->close();
vi user.php
<?phprequire_once  '../vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;$v_host ='order';$exc_name = 'topic_log';$routing_key = 'user.*';$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);$channel = $connection->channel();$channel->exchange_declare($exc_name,'topic',false,false,false);list($queue_name,,) = $channel->queue_declare('',false,false,true,false);$channel->queue_bind($queue_name,$exc_name,$routing_key);$callback = function($msg){echo 'received ' ,$msg->body,"\n";$msg->ack();
};$channel->basic_qos(null,1,null);$channel->basic_consume($queue_name,'',false,false,false,false,$callback);while($channel->is_open()){$channel->wait();
}$channel->close();$connection->close();
vi warn.php
<?phprequire_once  '../vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;$v_host ='order';$exc_name = 'topic_log';$routing_key = '*.warn';$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);$channel = $connection->channel();$channel->exchange_declare($exc_name,'topic',false,false,false);list($queue_name,,) = $channel->queue_declare('',false,false,true,false);$channel->queue_bind($queue_name,$exc_name,$routing_key);$callback = function($msg){echo 'received ' ,$msg->body,"\n";$msg->ack();
};$channel->basic_qos(null,1,null);$channel->basic_consume($queue_name,'',false,false,false,false,$callback);while($channel->is_open()){$channel->wait();
}$channel->close();$connection->close();

10、执行消费者

php all.php
php user.php
php warn.php

11、执行生产者

php publish.php

此时你会发现只有warn.php对应的消费者及all.php都有数据,如果你把publish.php生产者里面的$routing_key对应的值改成user.goods,你会发现user.php及all.php对应的消费者都有数据。这就是rabbitmq topic工作模式硬实力

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux目录结构及基础查看命令和命令模式
  • EmguCV学习笔记 VB.Net 4.5 像素距离和连通区域
  • ECCV2024|商汤发布3D面部动画系统UniTalker:通过统一模型扩展音频驱动的 3D 面部动画
  • Verilog刷题笔记55
  • 第4章 汇编语言和汇编软件
  • MySQL索引的性能优化
  • ES6-ES13学习笔记
  • 【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)
  • 【docker】使用docker-compose的时候如何更新镜像版本
  • Notepad--文本编辑工具 for Mac教程【苹果电脑-简单轻松上手-免费Mac软件推荐】
  • 又一实锤 美元丧钟敲响
  • hutool excel 导出,格式错误,打开乱码
  • Python实现人脸轮廓提取
  • Aria2安装和使用-Mac版
  • Swift 数据类型之可选值类型(Optional)详解
  • 【刷算法】求1+2+3+...+n
  • co.js - 让异步代码同步化
  • CSS相对定位
  • C语言笔记(第一章:C语言编程)
  • es6(二):字符串的扩展
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • java中具有继承关系的类及其对象初始化顺序
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Mysql数据库的条件查询语句
  • PAT A1092
  • scrapy学习之路4(itemloder的使用)
  • 免费小说阅读小程序
  • 全栈开发——Linux
  • 06-01 点餐小程序前台界面搭建
  • 7行Python代码的人脸识别
  • 第二十章:异步和文件I/O.(二十三)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (CPU/GPU)粒子继承贴图颜色发射
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (六)c52学习之旅-独立按键
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • ***详解账号泄露:全球约1亿用户已泄露
  • .cn根服务器被攻击之后
  • .gitignore文件—git忽略文件
  • .NET 反射 Reflect
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net和php怎么连接,php和apache之间如何连接
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .net中生成excel后调整宽度
  • @取消转义
  • [ Linux ] Linux信号概述 信号的产生
  • [AIGC codze] Kafka 的 rebalance 机制
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [C#]winform基于深度学习算法MVANet部署高精度二分类图像分割onnx模型高精度图像二值化