PHP版 RabbitMQ小技巧(一)用代码获得服务器上的消息队列名
2017-05-12 14:41
627 查看
最近在新浪开发一个用了MQ的URL监控项目,对PHP版的RabbitMQ有一些了解。想先吐个槽,就算是今年1月份的某些MQ的教程,很多都是不对的,和我在4月份看到的 官方的Tutorial 都有不小区别,看来RabbitMQ的官方最近发生了很大的革新呀。下面直接进入主题。
老规矩,直接讲干货,我直接跳过Erlang平台和RabbitMQ的安装。
利用MQ的bat获得消息队列
PHP代码获得消息队列
Linux系统
Windows系统
额外补充
如下图,我设置了几个测试队列,并放入了5条测试消息。
在RabbitMQ可使用的条件下,利用自带的bat文件即可完成命令行获得队列。
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]),有时捕捉的字符串太短,所以会捕捉到空字符,去除即可。
最后输出如下图:
代码与上面类似,不再赘述,最终输出如下图:
我承认这种办法很诡异,但是确实是没有办法的办法了,很多时候必须要获得目前服务器上的队列名才能写某些业务,比如,写消费者的时候、想自动化检测是否初始化MQ部署的时候等等。
如果有更好的获取MQ服务器的方法,请联系本人1,必将更好方法更新于此篇博文,将知识分享给大众。
下一篇文章将会讲解一些最新的MQ的使用方法,敬请期待。
后期优化方案:
代码速度还不够快,Linux要1s左右,Windows居然要4s,时间肯定是不能适应企业应用情景。如果要频繁获取队列,个人推荐利用Memcached扩展,把队列加入内存中,理论上读取时间在ms级别。
邮箱地址:546026679@qq.com ↩
老规矩,直接讲干货,我直接跳过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 ↩
相关文章推荐
- RabbitMQ 消息队列(centos安装与php下代码测试)
- php的rabbitmq队列的消费代码
- RabbitMQ消息队列在PHP下的应用
- 基于PHP使用rabbitmq实现消息队列
- (五)RabbitMQ消息队列-安装amqp扩展并订阅/发布Demo(PHP版)
- 消息队列-RabbitMq(PHP)
- RabbitMQ消息队列在PHP下的应用
- Java——定时请求后端接口数据发送RabbitMQ消息队列到指定MQ服务器
- 消息队列_RabbitMQ-0001.RabbitMQ消息代理/队列服务器快速安装部署?
- RabbitMQ消息队列在PHP下的应用
- RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列
- PHP与C(或其它语言)通过消息队列进行通讯,完整代码
- php 消息队列 rabbitmq 的安装使用
- RabbitMQ消息队列在PHP下的应用
- php amqp消息队列教程1-代码实现实例
- RabbitMQ消息队列在PHP下的应用
- Python操作RabbitMQ服务器实现消息队列的路由功能
- 详解Python操作RabbitMQ服务器消息队列的远程结果返回
- 使用PHP访问RabbitMQ消息队列
- 基于PHP使用rabbitmq实现消息队列