Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通讯。php
Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。数据库
消息中间件的传递模式
消息中间件通常有两种传递模型:点对点模型(PTP)和发布-订阅模型(Pub/Sub)[2]。
点对点模型(PTP)安全点对点模型用于消息生产者和消息消费者之间点到点的通讯。消息生产者将消息发动到由某个名字标识 的特定消费者。服务器
这个名字实际上对应于消息服务中的一个队列(Queue),在消息传动给消费者以前它被存储在这个队列中。网络
队列能够是持久的,以保证在消息 服务出现故障时仍然可以传递消息。
发布-订阅模型(Pub/Sub)
发布-订阅模型用称为主题(topic)的内容分层结构代替了PTP模型中的唯一目的地,发送应 用程序发布本身的消息,指出消息描述的是有关分层结构中的一个主题的信息。但愿接收这些消息的应用程序订阅了这个主题。订阅包含子主题的分层结构中的主题 的订阅者能够接收该主题和其子主题发表的全部消息。
下图展现了发布和订阅模型:
多个应用程序能够就一个主题发布和订阅消息,而应用程序对其余人仍然是匿名的。MOM 起着代理(broker)的做用,将一个主题已发表的消息路由给该主题的全部订阅者。框架
消息中间件产品与JMS异步
因为没有统一的规范和标准,基于消息中间件的应用不可移植,不一样的消息中间件也不能互操做,这大大阻碍了消息中间件的发展。 Java Message Service(JMS, Java消息服务)是SUN及其伙伴公司提出的旨在统一各类消息中间件系统接口的规范。它定义了一套通用的接口和相关语义,提供了诸如持久、验证和事务的消息服务,它最主要的目的是容许Java应用程序访问现有的消息中间件。JMS规范没有指定在消息节点间所使用的通信底层协议,来保证应用开发人员不用与其细节打交道,一个特定的JMS实现可能提供基于TCP/IP、HTTP、UDP或者其它的协议。分布式
目前许多厂商采用并实现了JMS API,如今,JMS产品可以为企业提供一套完整的消息传递功能,下面是一些比较流行的JMS商业软件和开源产品。工具
1.IBM MQSeries开发工具
IBM MQ系列产品提供的服务使得应用程序可使用消息队列进行相互交流,经过一系列基于Java的API,提供了MQSeries在Java中应用开发的方法。它支持点到点和发布/订阅两种消息模式,在基本消息服务的基础上增长告终构化消息类,经过工做单元提供数据整合等内容。
2.WebLogic
WebLogic是BEA公司实现的基于工业标准的J2EE应用服务器,支持大多数企业级JavaAPI,它彻底兼容JMS规范,支持点到点和发布/订阅消息模式,它具备如下一些特色:
1) 经过使用管理控制台设置JMS配置信息;
2) 支持消息的多点广播;
3) 支持持久消息存储的文件和数据库;
4) 支持XML消息,动态建立持久队列和主题。
3.SonicMQ
SonicMQ是Progress公司实现的JMS产品。除了提供基本的消息驱动服务以外,SonicMQ也提供了不少额外的企业级应用开发工具包,它具备如下一些基本特征:
1) 提供JMS规范的彻底实现,支持点到点消息模式和发布/订阅消息模式;
2) 支持层次安全管理;
3) 确保消息在Internet上的持久发送;
4) 动态路由构架(DRA)使企业可以经过单个消息服务器动态的交换消息;
5) 支持消息服务器的集群。
4.Active MQ
Active MQ是一个基于Apcache 2.0 licenced发布,开放源码的JMS产品。其特色为:
1) 提供点到点消息模式和发布/订阅消息模式;
2) 支持JBoss、Geronimo等开源应用服务器,支持Spring框架的消息驱动;
3) 新增了一个P2P传输层,能够用于建立可靠的P2P JMS网络链接;
4) 拥有消息持久化、事务、集群支持等JMS基础设施服务。
5.OpenJMS
OpenJMS是一个开源的JMS规范的实现,它包含如下几个特征:
1) 它支持点到点模型和发布/订阅模型;
2) 支持同步与异步消息发送;
3) 可视化管理界面,支持Applet;
4) 可以与Jakarta Tomcat这样的Servlet容器结合;
5) 支持RMI、TCP、HTTP与SSL协议。