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

RabbitMQ-消息队列之routing使用

1、安装rabbitmq

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

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

mkdir vendor

3、进入文件

cd vendor

4、安装php扩展

composer require php-amqplib/php-amqplib

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

cd ../
mkdir routing

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

cd routing
touch publish.php

7、输入routing生产者内容

<?phprequire_once  '../vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;$v_host = 'order';$exc_name ='direct_log';$routing_key = 'warn';$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);$channel = $connection->channel();$channel->exchange_declare($exc_name,'direct',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 error.php
touch info.php
touch warn.php

9、输入routing消费者内容

vi error.php
<?phprequire_once  '../vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;$v_host ='order';$exc_name = 'direct_log';$routing_key = 'error';$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);$channel = $connection->channel();$channel->exchange_declare($exc_name,'direct',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 info.php
<?phprequire_once  '../vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;$v_host ='order';$exc_name = 'direct_log';$routing_key = 'info';$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);$channel = $connection->channel();$channel->exchange_declare($exc_name,'direct',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 = 'direct_log';$routing_key = 'warn';$connection = new AMQPStreamConnection('localhost',5672,'wangyulong','wangyulong',$v_host);$channel = $connection->channel();$channel->exchange_declare($exc_name,'direct',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 error.php
php info.php
php warn.php

11、执行生产者

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Python系列】 Python打印99乘法表
  • 在 Go 语言中,字符串格式化拼接可以通过多种方法实现
  • 嵌入式Linux:proc文件系统
  • Scratch魔法课堂:开启编程奇幻之旅
  • 【排序篇】实现快速排序的三种方法
  • 动手学深度学习(pytorch)学习记录9-图像分类数据集之Fashion-MNIST[学习记录]
  • Vue的本地部署
  • LVS配置
  • Facebook的区块链技术:提升数据安全与隐私保护
  • Go更换国内源配置环境变量
  • XSS反射型和DOM型+DOM破坏
  • 【学习总结】JVM篇
  • 快速把文件名统计到excel表的方法
  • Kafka环境搭建
  • uniapp vue 在适配百度小程序平台动态:style
  • 【comparator, comparable】小总结
  • gcc介绍及安装
  • Golang-长连接-状态推送
  • HTML中设置input等文本框为不可操作
  • JavaScript设计模式与开发实践系列之策略模式
  • markdown编辑器简评
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Nodejs和JavaWeb协助开发
  • Python语法速览与机器学习开发环境搭建
  • Sass Day-01
  • Spark RDD学习: aggregate函数
  • vue--为什么data属性必须是一个函数
  • 初识 webpack
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 第十八天-企业应用架构模式-基本模式
  • 关于extract.autodesk.io的一些说明
  • 看域名解析域名安全对SEO的影响
  • 离散点最小(凸)包围边界查找
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 责任链模式的两种实现
  • 湖北分布式智能数据采集方法有哪些?
  • ​iOS安全加固方法及实现
  • #1014 : Trie树
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #QT(串口助手-界面)
  • (分类)KNN算法- 参数调优
  • (排序详解之 堆排序)
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)linux下的时间函数使用
  • (转)编辑寄语:因为爱心,所以美丽
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET关于 跳过SSL中遇到的问题
  • .NET开源纪元:穿越封闭的迷雾,拥抱开放的星辰
  • .net与java建立WebService再互相调用
  • .NET中分布式服务
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法