当前位置: 首页 > 后端技术 > PHP

PHP高级编程消息队列原理及实现方法详解

时间:2023-03-29 19:04:17 PHP

本文以实例说明PHP高级编程消息队列原理及实现方法。分享给大家,供大家参考,如下:什么是消息队列消息队列(英文:Messagequeue)是进程之间或者同一进程的不同线程之间的一种通信方式为什么要使用消息队列消息队列技术是一种分布式应用A交换信息的技术。消息队列可以驻留在内存中或磁盘上,并且队列存储消息直到它们被应用程序读取。使用消息队列,应用程序可以独立执行,而无需知道彼此的位置或在继续之前等待接收程序接收消息。什么时候使用消息队列,首先要弄清楚消息队列和远程过程调用的区别。很多读者咨询我的时候,我发现他们需要的是RPC(remoteprocedurecalls),而不是消息队列。消息队列可以同步或异步实现。通常,我们以异步方式使用消息队列,而远程过程调用大多使用同步方式。MQ与RPC有何不同?MQ通常传输一个不规则的协议,由用户定义并实现存储转发;而RPC通常是一个专用的协议,调用过程返回结果。当使用消息队列来满足同步需求时,远程过程调用(PRC)更适合你。对于异步需求,消息队列更适合你。目前很多消息队列软件同时支持RPC功能,很多RPC系统也可以异步调用。消息队列用来实现如下需求:①存储转发②分布式事务③发布订阅④基于内容的路由⑤点对点连接谁负责处理消息队列?通常,如果一个小的项目组可以有一个人来实现,包括消息推送,接收处理。对于一个大的团队,通常是定义好消息协议,然后各自开发自己的部分。比如一个团队负责写推送协议部分,另一个团队负责写接收处理部分。那么我们为什么不讨论消息队列框架呢?Framing有几个好处:①开发者不需要学习消息队列接口②开发者不需要关心消息的推送和接收③开发者通过统一的API推送消息④开发者的重点是实现业务逻辑功能如何实现消息队列框架是作者自己开发的一个SOA框架。该框架提供了三种接口,分别是SOAP、RESTful和AMQP(RabbitMQ)。了解了框架的思想后,可以很方便的进一步扩展,比如增加对XML-RPC、ZeroMQ等的支持。本文只讲消息队列框架部分。6.1.守护进程消息队列框架是一个本地应用程序(命令行程序),我们需要实现一个守护进程才能让它在后台运行。每个实例处理一组队列,实例化需要提供三个参数,$queueName='queuename',$exchangeName='exchangename',$routeKey='route'$daemon=newframeworkRabbitDaemon($queueName='email',$exchangeName='email',$routeKey='email');守护进程需要以root用户身份运行。运行后会切换到普通用户,并创建一个进程ID文件,供进程停止时使用。守护进程核心代码6.2。MessageQueueProtocol消息协议是一个数组,序列化或者转换成JSON,推送到消息队列服务器。这里使用的是json格式的协议。$msg=array('Namespace'=>'namespace',"Class"=>"Email","Method"=>"smtp","Param"=>array($mail,$subject,$message,null));序列化协议{"Namespace":"single","Class":"Email","Method":"smtp","Param":[traffictransaction"netkiller@msn.com","Hello","TestHelloWorld",null]}考虑到通用性,使用json格式,让推送端可以使用任何语言。如果不考虑兼容性,建议使用二进制序列化,比如msgpack,效率更高。