JMS

JMS

 

  1.前言

    由于ActiveMQ是一种完全符合JMS规范的一种通信工具,所以在使用ActiveMQ前认识JMS规范就变的十分必要了。

    认识JMS主要从以下方面:

      a. JMS 模型

      b. JMS 对象模型

      c. JMS 传递方式

      d. JMS 消息类型<消息正文格式>

 

  2. 模型

    Java消息服务应用程序结构支持两种模型:

      点对点或队列模型

      这种模型的特殊之处在于:生产者不会指定唯一的消费者消费消息,而是多个消费者消费一个消息,即多个消费者都可以消费这条消息,且只有一个消费者可以消费到。

      JMS

 

      发布者/订阅者模型

      这种模型是使用发布/订阅者模式,订阅者保存Topic地址,从地址中“拉取”消息数据。

      JMS

    

   3. 对象模型

    ActiveMQ 依赖下面的模型进行消息发送接收。

    模型图如下:

    JMS

 

    JMS对象模型包含如下几个要素: 

      1)连接工厂。

        连接工厂(ConnectionFactory)是由管理员创建,并绑定到JNDI树中。客户端使用JNDI查找连接工厂,然后利用连接工厂创建一个JMS连接。

 

      2)JMS连接。

        JMS连接(Connection)表示JMS客户端和服务器端之间的一个活动的连接,是由客户端通过调用连接工厂的方法建立的。

 

      3)JMS会话。

        JMS会话(Session)表示JMS客户与JMS服务器之间的会话状态。JMS会话建立在JMS连接上,表示客户与服务器之间的一个会话线程。

 

      4)JMS目的。

        JMS目的(Destination),又称为消息队列,是实际的消息源。

 

      5)JMS生产者和消费者。

        生产者(Message Producer)和消费者(Message Consumer)对象由Session对象创建,用于发送和接收消息。

 

      6)JMS消息通常有两种类型:

         ① 点对点(Point-to-Point)。在点对点的消息系统中,消息分发给一个单独的使用者。点对点消息往往与队列(javax.jms.Queue)相关联。

         ② 发布/订阅(Publish/Subscribe)。发布/订阅消息系统支持一个事件驱动模型,消息生产者和消费者都参与消息的传递。生产者发布事件,而使用者订阅感兴趣的事件,并使用事件。该类型消息一般与特定的主题(javax.jms.Topic)关联。

 

    4.传递方式

      JMS有两种传递消息的方式:

        NON_PERSISTENT(非持久化):消息最多投递一次。若消费者服务未启动,则在消息发送后再启动消费者服务,消费者无法获取到之前发送的消息。

        PERSISTENT(持久化):使用暂存后再转送的机理投递。消费者在消息发送后启动服务,可以接收到之前发送的消息。

 

    5. JMS消息类型

        MS定义了五种不同的消息正文格式,以及调用的消息类型:        

          · StreamMessage -- Java原始值的数据流

 

          · MapMessage--一套名称-值对

 

          · TextMessage--一个字符串对象

 

          · ObjectMessage--一个序列化的 Java对象

 

          · BytesMessage--一个未解释字节的数据流