php队列数据 php栈与队列的区别( 四 )


(1) ConnectionFactory
创建Connection对象的工厂,针对两种不同的jms消息模型,分别有QueueConnectionFactory和TopicConnectionFactory两种 。可以通过JNDI来查找ConnectionFactory对象 。
(2) Destination
Destination的意思是消息生产者的消息发送目标或者说消息消费者的消息来源 。对于消息生产者来说,它的Destination是某个队列(Queue)或某个主题(Topic);对于消息消费者来说,它的Destination也是某个队列或主题(即消息来源) 。
所以,Destination实际上就是两种类型的对象:Queue、Topic可以通过JNDI来查找Destination 。
(3) Connection
Connection表示在客户端和JMS系统之间建立的链接(对TCP/IP socket的包装) 。Connection可以产生一个或多个Session 。跟ConnectionFactory一样,Connection也有两种类型:QueueConnection和TopicConnection 。
(4) Session
Session是操作消息的接口 。可以通过session创建生产者、消费者、消息等 。Session提供了事务的功能 。当需要使用session发送/接收多个消息时,可以将这些发送/接收动作放到一个事务中 。同样,也分QueueSession和TopicSession 。
(5) 消息的生产者
消息生产者由Session创建,并用于将消息发送到Destination 。同样,消息生产者分两种类型:QueueSender和TopicPublisher 。可以调用消息生产者的方法(send或publish方法)发送消息 。
(6) 消息消费者
消息消费者由Session创建 , 用于接收被发送到Destination的消息 。两种类型:QueueReceiver和TopicSubscriber 。可分别通过session的createReceiver(Queue)或createSubscriber(Topic)来创建 。当然 , 也可以session的creatDurableSubscriber方法来创建持久化的订阅者 。
(7) MessageListener
消息监听器 。如果注册了消息监听器 , 一旦消息到达,将自动调用监听器的onMessage方法 。EJB中的MDB(Message-Driven Bean)就是一种MessageListener 。
深入学习JMS对掌握JAVA架构 , EJB架构有很好的帮助,消息中间件也是大型分布式系统必须的组件 。本次分享主要做全局性介绍,具体的深入需要大家学习 , 实践,总结 , 领会 。
五、常用消息队列
一般商用的容器,比如WebLogic,JBoss,都支持JMS标准 , 开发上很方便 。但免费的比如Tomcat,Jetty等则需要使用第三方的消息中间件 。本部分内容介绍常用的消息中间件(Active MQ,Rabbit MQ,Zero MQ,Kafka)以及他们的特点 。
5.1 ActiveMQ
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线 。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位 。
ActiveMQ特性如下:
⒈ 多种语言和协议编写客户端 。语言: Java,C,C++,C#,Ruby,Perl,Python,PHP 。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
⒉ 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
⒊ 对spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去 , 而且也支持Spring2.0的特性
⒋ 通过了常见J2EE服务器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置 , 可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
⒌ 支持多种传送协议: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,持久化 。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗 。

推荐阅读