关于php:PHP高级编程之消息队列原理与实现方法详解

4次阅读

共计 1479 个字符,预计需要花费 4 分钟才能阅读完成。

本文实例讲述了 PHP 高级编程之音讯队列原理与实现办法。分享给大家供大家参考,具体如下:

  1. 什么是音讯队列

音讯队列(英语:Message queue)是一种过程间通信或同一过程的不同线程间的通信形式

  1. 为什么应用音讯队列

音讯队列技术是分布式应用间替换信息的一种技术。音讯队列可驻留在内存或磁盘上, 队列存储音讯直到它们被应用程序读出。通过音讯队列,应用程序可独立地执行,它们不须要晓得彼此的地位、或在继续执行前不须要期待接管程序接管此音讯。

  1. 什么场合应用音讯队列

你首先须要弄清楚,音讯队列与近程过程调用的区别,在很多读者征询我的时候,我发现他们须要的是 RPC(近程过程调用),而不是音讯队列。

音讯队列有同步或异步实现形式,通常咱们采纳异步形式应用音讯队列,近程过程调用多采纳同步形式。

MQ 与 RPC 有什么不同?MQ 通常传递无规则协定,这个协定由用户定义并且实现存储转发;而 RPC 通常是专用协定,调用过程返回后果。

  1. 什么时候应用音讯队列

同步需要,近程过程调用 (PRC) 更适宜你。

异步需要,音讯队列更适宜你。

目前很多音讯队列软件同时反对 RPC 性能,很多 RPC 零碎也能异步调用。

音讯队列用来实现下列需要

① 存储转发

② 分布式事务

③ 公布订阅

④ 基于内容的路由

⑤ 点对点连贯

  1. 谁负责解决音讯队列

通常的做法,如果小的我的项目团队能够有一个人实现,包含音讯的推送,接管解决。如果大型团队,通常是定义好消息协定,而后各自开发各自的局部,例如一个团队负责写推送协定局部,另一个团队负责写接管与解决局部。

那么为什么咱们不讲音讯队列框架化呢?

框架化有几个益处:

① 开发者不必学习音讯队列接口
② 开发者不须要关怀音讯推送与接管
③ 开发者通过对立的 API 推送音讯
④ 开发者的重点是实现业务逻辑性能

  1. 怎么实现音讯队列框架

上面是作者开发的一个 SOA 框架,该框架提供了三种接口,别离是 SOAP,RESTful,AMQP(RabbitMQ),了解了该框架思维,你很容易进一步扩大,例如减少 XML-RPC, ZeroMQ 等等反对。

本文只讲音讯队列框架局部。

6.1. 守护过程

音讯队列框架是本地应用程序(命令行程序),咱们为了让他在后盾运行,须要实现守护过程。

每个实例解决一组队列,实例化须要提供三个参数,$queueName = ‘ 队列名 ’, $exchangeName = ‘ 替换名 ’, $routeKey = ‘ 路由 ’

$daemon = new frameworkRabbitDaemon($queueName = ’email’, $exchangeName = ’email’, $routeKey = ’email’);

守护过程须要应用 root 用户运行,运行后会切换到普通用户,同时创立过程 ID 文件,以便过程进行的时候应用。

守护过程外围代码

6.2. 音讯队列协定

音讯协定是一个数组,将数组序列化或者转为 JSON 推送到音讯队列服务器,这里应用 json 格局的协定。

$msg = array(

'Namespace'=>'namespace',
"Class"=>"Email",
"Method"=>"smtp",
"Param" => array($mail, $subject, $message, null)

);

序列化后的协定

{“Namespace”:”single”,”Class”:”Email”,”Method”:”smtp”,”Param”:[流量交易 ”netkiller@msn.com”,”Hello”,” TestHelloWorld”,null]}

应用 json 格局是思考到通用性,这样推送端能够应用任何语言。如果不思考兼容,倡议应用二进制序列化,例如 msgpack 效率更好。

正文完
 0