php数据结构对列 php对数据库的操作( 五 )


⒌ 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
⒍ 支持通过JDBC和journal提供高速的消息持久化
⒎ 从设计上保证了高性能的集群,客户端-服务器,点对点
⒏ 支持Ajax
⒐ 支持与Axis的整合
⒑ 可以很容易得调用内嵌JMS provider,进行测试
5.2 RabbitMQ
RabbitMQ是流行的开源消息队列系统,用erlang语言开发 。RabbitMQ是AMQP(高级消息队列协议)的标准实现 。支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX , 持久化 。用于在分布式系统中存储转发消息 , 在易用性、扩展性、高可用性等方面表现不俗 。
几个重要概念:
Broker:简单来说就是消息队列服务器实体 。
Exchange:消息交换机 , 它指定消息按什么规则 , 路由到哪个队列 。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列 。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来 。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递 。
【php数据结构对列 php对数据库的操作】vhost:虚拟主机,一个broker里可以开设多个vhost , 用作不同用户的权限分离 。
producer:消息生产者,就是投递消息的程序 。
consumer:消息消费者,就是接受消息的程序 。
channel:消息通道 , 在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务 。
消息队列的使用过程,如下:
(1)客户端连接到消息队列服务器,打开一个channel 。
(2)客户端声明一个exchange,并设置相关属性 。
(3)客户端声明一个queue,并设置相关属性 。
(4)客户端使用routing key , 在exchange和queue之间建立好绑定关系 。
(5)客户端投递消息到exchange 。
exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里 。
5.3 ZeroMQ
号称史上最快的消息队列 , 它实际类似于Socket的一系列接口 , 他跟Socket的区别是:普通的socket是端到端的(1:1的关系),而ZMQ却是可以N:M 的关系,人们对BSD套接字的了解较多的是点对点的连接 , 点对点连接需要显式地建立连接、销毁连接、选择协议(TCP/UDP)和处理错误等,而ZMQ屏蔽了这些细节,让你的网络编程更为简单 。ZMQ用于node与node间的通信,node可以是主机或者是进程 。
引用官方的说法: “ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层 , 像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高 。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩 。ZMQ的明确目标是“成为标准网络协议栈的一部分,之后进入Linux内核” 。现在还未看到它们的成功 。但是,它无疑是极具前景的、并且是人们更加需要的“传统”BSD套接字之上的一 层封装 。ZMQ让编写高性能网络应用程序极为简单和有趣 。”
特点是:
高性能,非持久化;
跨平台:支持Linux、Windows、OS X等 。
多语言支持; C、C++、Java、.NET、Python等30多种开发语言 。
可单独部署或集成到应用中使用;
可作为Socket通信库使用 。
与RabbitMQ相比,ZMQ并不像是一个传统意义上的消息队列服务器,事实上,它也根本不是一个服务器,更像一个底层的网络通讯库,在Socket API之上做了一层封装,将网络通讯、进程通讯和线程通讯抽象为统一的API接口 。支持“Request-Reply “,”Publisher-Subscriber“,”Parallel Pipeline”三种基本模型和扩展模型 。

推荐阅读