• ActiveMQ (二):JMS


      1.前言

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

        认识JMS主要从以下方面:

          a. JMS 模型

          b. JMS 对象模型

          c. JMS 传递方式

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

      2. 模型

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

          点对点或队列模型

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

          

          发布者/订阅者模型

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

          

        

       3. 对象模型

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

        模型图如下:

        

        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--一个未解释字节的数据流

        参考资料:

        1. http://baike.baidu.com/item/JMS/2836691?sefr=enterbtn#5

        2. http://shmilyaw-hotmail-com.iteye.com/blog/1897635

  • 相关阅读:
    C# 动态创建SQL数据库(一)
    在Winform中菜单动态添加“最近使用文件”
    转(C# 类似右键菜单弹出窗体)
    为什么不能用Abort退出线程
    C# GDI绘制波形图
    转(C# 实现生产者消费者队列)
    为字段设置初始值
    闲话资源管理
    正确使用 new 修饰符
    减少装箱与拆箱
  • 原文地址:https://www.cnblogs.com/springlight/p/6433637.html
Copyright © 2020-2023  润新知