PHP使用ActiveMQ实现消息队列的详细说明
本文的例子讲述了PHP如何使用ActiveMQ实现消息队列。分享给大家参考,如下:
之前,我们学习了如何部署ActiveMQ。我们知道,可以通过ActiveMQ的管理后台查看任务队列。
今天
![这里写图片描述](https://www.baoge.net/d/file/p/2021/08-23/5a62a1c252c72157d1e8bcfc4dc8fcfc.png)
用PHP操作ActiveMQ,可以使用第三方扩展。下载:
Composer需要fuse source/stomp-PHP 33602.0 . *然后创建一个新的test.php:
?phprequire __DIR__。/vendor/autoload . PHP ';//导入自动加载的文件$ connect=new \ fuse source \ stomp \ stomp(' TCP ://10 . 211 . 55 . 13/:61613 ');$ connect-connect();$ userId=1001$result=$connect-send('email ',$ userId);//比发送电子邮件var _ dump($ result);
成功发送消息,打印bool(真)
我们签到了ActiveMQ自己的管理后台,确实有一个名为“email”的队列。
我们也可以用上面发送的id发送json数据。
$data=array('id'=1001,' email'='[emailprotected]',' content '=' test ');$result=$connect-send('email ',JSON _ encode($ data));我们可以在MQ后台查看消息详细信息
这里上面的代码并不完美。如果我们的服务器重新启动activemq,未处理的消息将会丢失。此时,我们需要使用send()方法的第三个参数。
//消息持久性为真,‘true’$ result=$ connect-send(' email ',JSON _ encode ($ data),array(' persistent '=' true ');
前面我们完成了『发送』
向mq服务器发送消息(电子邮件消息)。那么mq队列中的任务是如何处理的呢??phprequire __DIR__。/vendor/autoload . PHP ';//导入自动加载的文件$ connect=new \ fuse source \ stomp \ stomp(' TCP ://10 . 211 . 55 . 13/:61613 ');$ connect-connect();//订阅队列消息$ connect-subscribe(' email ');if($ connect-hasFrameToRead()){ $ frame=$ connect-readFrame();print _ r($ frame);}在mq服务器上,订阅(侦听)队列消息。在服务器端命令行下执行: PHP mqServer.php。如果有处理过的信息,可以读出,打印结果如下:
fuse source \ Stomp \ Frame Object([command]=MESSAGE[headers]=Array([expires]=0[destination]=/queue/email[priority]=4[MESSAGE-id]=id : localhost . local domain-38488-1488196907415-3:23:-13:133:1[timestamp]=148947647931][body]={ '
我们在循环(无限循环)中读取并等待新消息:
do { if($ connect-hasFrameToRead()){ $ frame=$ connect-readFrame();print _ r($ frame-body);} } while(true);处理完消息后(发送邮件和其他服务完成后),有必要通知mq我处理了消息。
if($ connect-hasFrameToRead()){ $ frame=$ connect-readFrame();//print _ r($ frame-body);//做业务逻辑//具体发送邮件//发送邮件//最后通知mq我们已经处理了消息$ connect-ack($ frame);}我们还可以优化代码,求解无限循环,控制循环(下面是方案演示)
Do{ //将等到有可用消息后再执行以下代码if($ connect-hasframeread()){ $ frame=$ connect-read frame();//print _ r($ frame-body);//做业务逻辑//具体发送邮件//发送邮件休眠(2);//模拟延迟//最后通知mq我们已经处理了消息$ connect-ack($ frame);}//控制循环$ next=trueif(file _ exists(_ dir _ _)。/stop '){//如果有一个名为stop//的文件,它不会循环$ next=false} } while($ next);更多对PHP相关内容感兴趣的读者可以查看本网站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》、《PHP数学运算技巧总结》、0103010
希望本文对PHP编程有所帮助。
版权声明:PHP使用ActiveMQ实现消息队列的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。