PHP版 RabbitMQ小技巧(一)用代码获得服务器上的消息队列名
来源:互联网 发布:百度黑马程序员 编辑:程序博客网 时间:2024/06/05 18:38
最近在新浪开发一个用了MQ的URL监控项目,对PHP版的RabbitMQ有一些了解。想先吐个槽,就算是今年1月份的某些MQ的教程,很多都是不对的,和我在4月份看到的 官方的Tutorial 都有不小区别,看来RabbitMQ的官方最近发生了很大的革新呀。下面直接进入主题。
老规矩,直接讲干货,我直接跳过Erlang平台和RabbitMQ的安装。
- 利用MQ的bat获得消息队列
- PHP代码获得消息队列
- Linux系统
- Windows系统
- 额外补充
1. 利用MQ的.bat获得消息队列
不要怀疑为什么我会讲MQ的.bat命令,这是曲线救国策略,最根本的原因是PHP的MQ不能通过某个函数直接获得服务器上面部署的消息队列,
如下图,我设置了几个测试队列,并放入了5条测试消息。
在RabbitMQ可使用的条件下,利用自带的bat文件即可完成命令行获得队列。
2. PHP代码获得消息队列
在这部分我会用到正则表达式,不熟悉的同学可以看看这篇简短的博客 《PHP正则表达式入门教程》 ,包客官您满意。
Linux系统
define("RABBIT_SERVER_PATH", '/usr/local/lib/erlang/lib/rabbitmq_server-0.0.0'); $cmd = RABBIT_SERVER_PATH . '/sbin/rabbitmqctl list_queues';exec($cmd, $res);for ($i = 1; $i < count($res); $i++){ preg_match("/[\w\W]+(?=\s)/", $res[$i], $matches); $queueNames[] = trim($matches[0]); unset($matches);}var_dump($queueNames);
- RABBIT_SERVER_PATH,是MQ的安装位置,
- exec($cmd, $res),执行list_queues命令,MQ的server会返回队列到$res中,并会形成数组,形如下图:
- “/[\w\W]+(?=\s)/”,分为2部分看,[\w\W]+为了捕捉所有的中文、英文、数字、字符,(?=\s)为正向预查空字符。比如当返回“testQueue2 2”时,会捕捉到字符串“testQueue2”。
- trim($match[0]),有时捕捉的字符串太短,所以会捕捉到空字符,去除即可。
最后输出如下图:
Windows系统
//注意Windows路径分隔是反斜杠“\”。define("RABBIT_SERVER_PATH", 'cd E:\RabbitMQ Server\rabbitmq_server-3.6.6'); $cmd = RABBIT_SERVER_PATH . ' & .\sbin\rabbitmqctl list_queues';exec($cmd, $res);for ($i = 1; $i < count($res); $i++){ preg_match("/[\w\W]+(?=\s)/", $res[$i], $matches); $queueNames[] = trim($matches[0]); unset($matches);}var_dump($queueNames);
代码与上面类似,不再赘述,最终输出如下图:
3. 额外补充
个人感想:
我承认这种办法很诡异,但是确实是没有办法的办法了,很多时候必须要获得目前服务器上的队列名才能写某些业务,比如,写消费者的时候、想自动化检测是否初始化MQ部署的时候等等。
如果有更好的获取MQ服务器的方法,请联系本人1,必将更好方法更新于此篇博文,将知识分享给大众。
下一篇文章将会讲解一些最新的MQ的使用方法,敬请期待。
后期优化方案:
代码速度还不够快,Linux要1s左右,Windows居然要4s,时间肯定是不能适应企业应用情景。如果要频繁获取队列,个人推荐利用Memcached扩展,把队列加入内存中,理论上读取时间在ms级别。
- 邮箱地址:546026679@qq.com ↩
0 0
- PHP版 RabbitMQ小技巧(一)用代码获得服务器上的消息队列名
- 消息队列-RabbitMq(PHP)
- 消息队列-RabbitMq(PHP)
- php amqp 消息队列 RabbitMQ 安装(一)
- php RabbitMQ消息队列
- 关于rabbitmq消息队列服务器的使用(二)
- RabbitMQ消息队列一
- RabbitMQ消息队列(一)
- RabbitMQ消息队列(一)简单介绍
- 用php操作消息隊列,RabbitMQ消息队列在PHP下的应用大全
- php的rabbitmq队列的消费代码
- (六)RabbitMQ消息队列-消息任务分发与消息ACK确认机制(PHP版)
- RabbitMQ+PHP消息队列系统
- (一)RabbitMQ消息队列-RabbitMQ的优劣势及产生背景
- RabbitMQ分布式消息队列服务器(一、Windows下安装和部署)
- RabbitMQ消息队列测试代码
- SpringBoot的RabbitMQ消息队列: 一、消息发送接收第一印象
- SpringBoot的RabbitMQ消息队列: 一、消息发送接收第一印象
- IDEA的一些设置
- Spark性能优化 开发调优
- etcd v3命令和API
- 欢迎使用CSDN-markdown编辑器
- 416. Partition Equal Subset Sum
- PHP版 RabbitMQ小技巧(一)用代码获得服务器上的消息队列名
- Field 'id' doesn't have a default value
- 线程简介
- 精简Linux内核编译的简单方法
- CListCtrl的部分用法
- 常用工具推荐
- Servlet-3
- CountDownLatch使用之等待超时
- html 5的新增表单属性