JMS教程(一)

来源:互联网 发布:零基础网络运维工程师 编辑:程序博客网 时间:2024/06/05 04:19

      官网:       http://activemq.apache.org/

      JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

      JMS是一种与厂商无关的 API,用来访问消息收发系统消息。它类似于JDBC(Java Database Connectivity):这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。  JMS的提供商有很多,这篇文章中我们用的是  apache的  ActiveMQ. 它是一个开源产品,由Apache组织维护和管理.

      JMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个 JMS客户机发送消息。

     它支持两种消息通信模型:点到点(point-to-point)(P2P)模型和发布/订阅(Pub/Sub)模型。


    1. P2P模型示意:

   

         P2P模型的特点:

                               1. 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
                               2. 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列
                               3. 接收者在成功接收消息之后需向队列应答成功
                               4. 每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。

        应用:    如果你希望发送的每个消息都应该被成功处理的话,那么你需要P2P模式。

                       比如: 银行取款后发送一个确认短信,网站用户注册成功后发送一封激活的邮件等.

     2. Pub/Sub模型:

              

           Pub/Sub模型的特点:

                              1. 每个消息可以有多个消费者
                              2. 发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。
                              3. 为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。

           应用:   如果你希望发送的消息可以不被做任何处理、或者被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型

                      比如; 网络聊天室,QQ群空间.


    3. 关于JMS体系的一些术语:

                     JMS提供者: 连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。

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

                     JMS生产者: 创建并发送消息的JMS客户。

                     JMS消费者: 接收消息的JMS客户。

                    JMS消息:       可以在JMS客户之间传递的数据的对象.

                    JMS队列:      queue是一个容纳那些被发送的等待阅读的消息的区域。与队列名字所暗示的意思不同,消息的接受顺序并不一定要与消息的发送顺序相同。一旦一个消息被阅读,该消息将被从队列中移走。

                    JMS主题:     一种支持发送消息给多个订阅者的机制。


      4.  关于JMS中传递的消息的一些属性:

                  a)    JMS消息的保存特性可以设置成 PERSISTENT或NON_PERSISTENT:        设置成PERSISTENT,则表明 如果一个JMS服务离线,那么持久性消息不会丢失但是得等到这个服务恢复联机时才会被传递。   设置成NON_PERSISTENT,则表明消息最多投递一次。

                  b)    JMS消息生存周期:   JMS定义了从0到9的优先级路线级别,0是最低的优先级而9则是最高的。更特殊的是0到4是正常优先级的变化幅度,而5到9是加快的优先级的变化幅度。

                  c)    JMS消息类型:   TextMessage文本消息, ObjectMessage对象消息, MapMessage属性消息, StreamMessage原始流消息. BytesMessage字节数组消息.

  

      5. JMS中的API接口:

                  ConnectionFactory:   联接工厂的实现类由各个消息提供商提供,如我们采用的activeMQ, 则它的工厂类为: org.apache.activemq.ActiveMQConnectionFactory

                   Connection:  

                   Session:

                   Destination: 在Destination中要指定目标的类型: queue还是topic, 以及这个queue或topic的id.

                   Message:

                  MessageConsumer: 

                  MessageProducer:

               

           以上的这些接口的使用顺序:

                       ConnectionFactory---->Connection--->Session--->Message
                       Destination + Session------------------------------------>Producer
                       Destination + Session------------------------------------>MessageConsumer

                 

          

0 0
原创粉丝点击