JMS(Java Message Service)

(来源:http://www.apusic.com)

消息中间件

消息中间件提供企业数据的异步传输,通过消息中间件,一些原本互相孤立的业务组件可以组合成一个可靠的、灵活的系统。

消息中间件大致分为两类

Point-to-Point(PTP)

Publish-Subscribe(Pub/Sub)

PTP是点对点传输消息,建立在消息队列的基础上,每个客户端对应一个消息队列,客户端发送消息到对方的消息队列中,从自己的消息队列读取消息。 Pub/Sub是将消息定位到某个层次结构栏目的节点上,Pub/Sub通常是匿名的并能够动态发布消息,Pub/Sub必须保证某个节点的所有发布者(Publisher)发布的信息准区无误地发送到这个节点的所有消息订阅者(Subscriber)。

什么是JMS(Java Message Service)

JMS定义了Java中访问消息中间件的接口。

JMS只是接口,并没有给予实现,实现JMS接口的消息中间件叫JMS Provider,这样的消息中间件可以从Java里通过JMS接口进行调用。

JMS和其他企业级Java API的关系

JDBC JMS客户端可以使用JDBC接口,可以将JDBC和JMS包含在一个事务里。这种包含可以在EJB里,也可以直接调用JTA(Java Transaction API)接口实现。

JavaBeans JavaBeans可以用JMS Session发送接收消息。

EJB

对于EJB组件来说,JMS和JDBC一样,是一个很重要的企业级服务资源。目前的EJB规范定义客户端只能同步调用EJB,未来的规范将会定义通过一个JMS客户端发消息异步调用EJB组件。

JTA(Java Transaction API) JMS客户端可以用JTA启动事务。JMS Provider可以选择是否支持分布式事务。

JTS(Java Transaction Service) JMS可以和JTS一起组成一个分布式事务,如将发送接收消息和更新数据库包含在一个事务里。

JNDI JMS 客户端通过JNDI调用JMS中的对象。

JMS 消息模型

JMS消息由两部分构成:header和body。header包含消息的识别信息和路由信息,body包含消息的实际数据。

根据数据格式,JMS消息可分为以下五种

BytesMessage 消息是字节流。

MapMessage 消息是一系列的命名和值的对应组合。

ObjectMessage 消息是一个流化的Java对象。

StreamMessage 消息是Java中的输入输出流。

TextMessage 消息是一个字符串,这种类型将会广泛用于XML格式的数据。

JMS 消息优先级

邮局发信分为平信和特快专递两种,同样JMS也根据消息的轻重缓急将消息分为0-9十个级别。0-4是普通消息,5-9是加急消息。JMS不要求消息中间件严格按照这十个优先级发送消息,但必须保证加急消息要先于普通消息到达。

Apusic对JMS的支持

Apusic Application Server包含一个完全遵循JMS接口规范开发的消息中间件,Apusic消息中间件支持通常的两种消息中间件:PTP和Pub/Sub。