JMS API

JMS是Sun公司通过JSR-914项目创建的一种企业消息传送API。JMS自身并不是一种消息传送系统,它是消息传送客户端和消息传送系统通信时所需接口和类的一个抽象。与JDBC抽象访问关系数据库、JNDI抽象访问命名和目录服务的方式一样,JMS抽象可以访问消息提供者。使用JMS,应用程序的消息传送客户端可以实现跨消息服务器产品的移植。

JMS最初的目标只是提供一个Java API,用于企业消息传送系统的连接。然而,这个目标很快就变得更加宏大:支持消息传送机制,使其成为一流的Java 分布式计算范例,并且可以和CORBA及企业级JavaBean(EJB)等基于RPC的系统相提并论。

JMS API可以分为3个主要部分:公共API点对点API发布/订阅API在JMS1.1中,公共API可被用于向一个队列或主题发送消息,或从其中接收消息。点对点API专门用于使用队列的消息传送,而发布/订阅API则专门用于使用主题的消息传送。

JMS公共API

在JMS公共API内部,和发送与接收JMS消息有关的JMS API接口主要有7个:

  • ConnectionFactory

  • Destination

  • Connection

  • Session

  • Message

  • MessageProducer

  • MessageConsumer

在这些公共接口中,ConnectionFactoryDestination必须使用JNDI(遵照JMS规范要求)从提供者处获得。其它接口则可以通过工厂方法在不同的API接口中创建。举例来说,一旦有了一个ConnectionFactory,就可以创建一个Connection。一旦有了一个Connection,就可以创建一个Session。而一旦有了一个Session,就可以创建一个Message、MessageProducer和MessageConsumer。这7个主要的JMS公共API接口之间的关系,如图:

JMS API

点对点API

点对点消息传送模型API特指JMS API之内基于队列的接口。下面是用于向一个队列发送和从一个队列接收消息的接口:

  • QueueConnectionFactory

  • Queue

  • QueueConnection

  • QueueSession

  • Message

  • QueueSender

  • QueueReceiver

与JMS公共API一样,QueueConnectionFactoryQueue对象必须通过JNDI从JMS提供者处获得(按照JMS规范的要求)。请注意,大多数接口名称仅仅是在公共API接口名称之前添加Queue一词而已。不同之处在于,这里称为Queue的Destination接口,而MessageProducer和MessageConsumer接口则分别称为QueueSender和QueueReceiver。一般来说,使用点对点消息传送模型的应用程序将使用基于队列的API,而不是使用公共API 。 基于队列的JMS API接口之间的关系如图:

JMS API

发布/订阅API

由于基于主题的JMS API类似于基于队列的API,因此在大多数情况下,Queue这个词会由Topic取代。发布/订阅消息传送模型内部使用的接口如下:

  • TopicConnectionFactory

  • Topic

  • TopicConnection

  • TopicSession

  • Message

  • TopicPublisher

  • TopicSubscriber

请注意,除了TopicPublisher和TopicSubscriber不同以外,发布/订阅模型中的接口和p2p模型中的那些接口名称基本类似。发布/订阅模型API的关系图如下:

JMS API

转载于:https://my.oschina.net/fhd/blog/214065