`
newleague
  • 浏览: 1493259 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

深入浅出JMS(一)——JMS简介

    博客分类:
  • JMS
 
阅读更多

如果手机只能进行实时通话,没有留言和短信功能会怎么样?一个电话打过来,正好没有来得及接上,那么这个电话要传递的信息肯定就收不到了。为什么不能先将信息存下来,当用户需要查看信息的时候再去获得信息呢?伴随着这个疑惑,短息和留言应运而生,无论手机是否开机、是否未及时接到,我们都能得到其中的信息。JMS提供了类似这样的功能,本章我们将系统的学习JMS中的相关重要内容。

clip_image004

      Ø 掌握JMS基本概念及适用范围

      Ø 点对点模型与发布/订阅模型的区别和使用场合

      Ø 熟悉核心和通用的JMS API

      Ø 熟悉并理解JMS客户端开发的步骤

      Ø 消息的同步和异步接收的实现方式

      Ø 串包问题的解决办法

企业消息系统

      Java Message Service是由Sun开发的,它为 Java程序提供一种访问企业消息系统的方法。在讨论JMS之前,我们分来析一下企业消息系统。
      企业消息系统,即面向消息的中间件(MOM),提供了以松散耦合的灵活方式集成应用程序的一种机制。它们提供了基于存储和转发的应用程序之间的异步数据发送,即应用程序彼此不直接通信,而是与作为中介的MOM 通信。MOM提供了有保证的消息发送,应用程序开发人员无需了解远程过程调用(PRC)和网络/通信协议的细节。ActiveMQ正是MOM中优秀的一员。

企业消息系统的好处

我们先来看看下图,应用程序A将Message发送到服务器上,然后应用程序B从服务器中接收A发来的消息,通过这个图我们一起来分析一下JMS的好处

image

图 1 JMS通讯示意图

提供消息灵活性

      应用程序A与应用程序B通过使用MOM的应用程序编程接口(API)发送消息进行通信。MOM 将消息路由给应用程序B,这样消息就可以存在于MOM中,MOM 负责处理网络通信。如果网络连接不可用,MOM会存储消息,直到连接变得可用时,再将消息转发给应用程序B。
      灵活性的另一方面体现在,当应用程序A发送其消息时,应用程序B甚至可以不处于执行状态。MOM将保留这个消息,直到应用程序B开始执行并试着检索消息为止。这还防止了应用程序A因为等待应用程序B检索消息而出现阻塞。
      这种异步通信要求应用程序的设计与现在大多数应用程序不同,不过对于时间无关或并行处理,它可能是一个极其有用的方法。

松散耦合

      企业消息系统的真正威力在于应用程序的松散耦合。在上面的图中,由应用程序A发送消息指定一个特定目标,如“订单处理”。而现在,是由应用程序B提供订单处理功能。
      但是在将来,我们可以用不同的订单处理程序替换应用程序B,应用程序A将不再是明智之选。替换应用程序将继续发送消息完成“订单处理”,而消息也仍将得到处理。
      同样,我们也可以替换应用程序A,只要替换应用程序继续发送消息进行“订单处理”,订单处理程序就无需知道是否有一个新的应用程序在发送订单。

JMS是什么

      JMS是一系列的接口及相关语义的集合,通过这些接口和和其中的方法,JMS客户端如何去访问消息系统,完成创建、发送、接收和读取企业消息系统中消息。
      在JMS之前,每一家MOM厂商都用专有API为应用程序提供对其产品的访问,通常可用于许多种语言,其中包括Java语言。JMS通过MOM为Java程序提供了一个发送和接收消息的标准的、便利的方法。用JMS编写的程序可以在任何实现JMS标准的MOM上运行。
      JMS可移植性的关键在于:JMS API是由Sun作为一组接口而提供的。提供了JMS功能的产品是通过提供一个实现这些接口的提供者来做到这一点的。开发人员可以通过定义一组消息和一组交换这些消息的应用程序,建立JMS应用程序,实现异步通讯。

JMS的目标

      JMS从提出以来,致力于完成如下几个目标:
定义一组消息公用概念和实用工具。
     
所有Java应用程序都可以使用JMS中定义的API去完成消息的创建、接收与发送,任何实现了JMS标准的MOM都可以作为消息的中介,完成消息的存储转发。
最大化消息应用程序的可移植性。

     
MOM提供了有保证的消息发送,应用程序开发人员无需了解远程过程调用(PRC)和网络/通信协议的细节,提供了程序的可移植性。
最大化降低应用程序与应用系统之间的耦合度。
     
由于MOM的存在,各个应用程序只关心和MOM之间如何进行消息的接收与发送,而无需关注MOM的另一边,其他程序是如何接收和发送的。

JMS两种消息模型

JMS提供了两种消息通信模型:

      Ø 点到点(P2P)模型

      Ø 发布/订阅(Pub/Sub)模型

clip_image010

图 2 JMS通讯模型

从图中可以看出,ClientA和ClientB是消息生产者,通过两种不同的目的地分别向ClientC、ClientD、ClientE和ClientF发送消息。
      在ClientA、C、D之间的消息是点对点模型,使用这种模型,客户端发送消息到队列目的地(Queue),从这个队列里面只有一个消息接收者可以收到那个消息,其他访问同一目的地的接收者不会接收到该消息。如ClientC接收Queue中的Msg1消息,ClientD接收Queue中的Msg2消息。
      在ClientB、E、F之间的消息是发布/订阅模型。使用这种广播模型,一个客户端发送消息给主题目的地(Topic),任何数量的消费订阅者可以从这个主题目的地来接收它们。如:ClientE和ClientF都接收这个Msg3这条消息。

点到点模型

点对点传递模型:生产者发送消息到一个特定的队列(Queue)中,而消费者从一个消息队列中得到消息,如下图所示:

image

图 3 点到点通讯模型示意图

点对点模型的特点:

Ø  每条消息有一个消费者

      每条只有一个消费者,如果一条消息被消息者接收,那么其他的消费者就不能得到这条消息了。

Ø 发送和接受消息与时间没有关系

      也就是说,生产者在发送消息后,消费者可以在任意的时刻接收,但有两个前提:

            1、消息未过期

            2、消息没有被其他的用户接收

      消费者也可以先运行,当生产者一运行,将消息发送到队列中,消费者即可从队列中获得消息,这叫“守株待兔“。

Ø  消费者必须确认对消息的接收

      收到消息后消费者必须确认消息已被接收,否则JMS服务提供者会认为该消息没有被接收,那么这条消息仍然可以被其他人接收。程序可以自动进行确认,不需要人工干预。

Ø  非持久的消息最多只发送一次

      非持久的消息最多只发送一次,表示消息有可能未被发送,造成未被发送的原因可能有:

            1、 JMS服务提供者出现宕机等情况,造成非持久信息的丢失

            2、 队列中的消息过期,未被接收

Ø  持久的消息严格发送一次

      我们可以将比较重要的消息设置为持久化的消息,持久化后的消息不会因为JMS服务提供者的故障或者其他原因造成消息丢失。

发布/订阅模型

      发布/订阅模型:发布/订阅传递消息类型与主题(Topic)有关。生产者发布消息,而消费者订阅感兴趣的消息,生产者将消息和一个特定的主题(Topic)连在一起,消息传递系统(MOM)根据消费者注册的兴趣,将消息传递给消费者。这种类型非常类似出版报纸、杂志的形式,如下图所示:

image

图 4 发布/订阅通讯模型示意图

发布/订阅模型的特点:

Ø  每个消息都可以有多个(0,1,……)订阅者

      每条消息可以有多个消费者,如果报纸和杂志一样,谁订阅了谁都可以获得。

Ø  订阅者只能消费他们订阅之后出版的消息

      这就要求订阅者必须先订阅,生产者再发布。即订阅者必须先运行,再等待生产者的运行,这和点对点类型有所差异。

Ø  订阅者必须保持为活动状态才能使用这些消息

      即订阅者必须保持活动状态等待发布者发布的消息,如果订阅者在发布者发布消息之后才运行,则不能获得先前发布者发布的消息。

分享到:
评论

相关推荐

    ActiveMQ在JMS中的运用-深入浅出JMS

    **ActiveMQ在JMS中的应用——深入理解JMS** Java消息服务(Java Message Service,简称JMS)是一种标准API,用于在Java应用程序之间传递消息,它提供了一种解耦和异步处理数据的方式。JMS允许应用程序创建、发送、...

    求精要诀——JavaEE编程开发案例精讲 源代码

    《求精要诀——JavaEE编程开发案例精讲》是一本深入浅出的JavaEE编程教程,由清华大学出版社出版。本书旨在通过丰富的实例讲解,帮助读者掌握JavaEE平台上的核心开发技术,提升实际项目开发能力。书中源代码的提供,...

    求精要诀——Java EE编程开发案例精讲 PPT

    《求精要诀——Java EE编程开发案例精讲》是一本深入浅出的教程,旨在帮助读者掌握Java EE(企业版)的编程技术。PPT形式的教程通常以清晰直观的方式呈现复杂的概念,便于学习和理解。这个压缩包包含了一系列章节的...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记——PPT简体版是针对初学者和有经验的开发者们的一份宝贵资源,它深入浅出地介绍了Java编程语言的核心概念和技术。这份笔记以PPT的形式呈现,使得学习过程更加直观易懂,适合课堂教学或自我学习。...

    Java JDK 6学习笔记——ppt

    Java JDK 6学习笔记——PPT简体版是针对初学者和有经验的开发者们的一份宝贵资源,它深入浅出地介绍了Java编程语言的核心概念和技术。这份资料以PPT的形式呈现,使得学习过程更加直观易懂,同时包含了课程中的源代码...

    从Java菜鸟到专家的资料

    2. **Think In Java.chm**:这是经典的《深入思考Java》电子版,作者Bruce Eckel深入浅出地讲解了Java语言的核心概念,包括面向对象编程、集合框架、多线程、异常处理等内容,是Java初学者必读的书籍之一。...

    Java企业级应用程序开发指南

    这本书深入浅出地讲解了Java在企业级应用中的核心概念和技术,通过丰富的实例帮助读者理解和掌握相关知识。 首先,"06_whatareservlets"章节介绍了Servlets,这是Java Web开发中的关键组件。Servlet是运行在服务器...

    深入Spring2-轻量级J2EE开发框架原理与实践

    总之,《深入Spring2:轻量级J2EE开发框架原理与实践》是一本深入浅出的Spring学习资料,适合希望掌握Spring框架的开发者阅读。通过这本书,读者不仅可以了解Spring2的核心理念,还能学习到如何将这些理念转化为实践...

    Java帮助.rar

    这本书深入浅出地介绍了Java编程的各种概念,包括基本类型、类与对象、接口、泛型、并发等,并强调了设计模式和面向对象编程的原则。阅读这本书,开发者能更好地理解Java的设计理念和最佳实践,提升编程思维。 最后...

    【中文】【基于JBOSS的J2EE开发 】【罗时飞】【(PDF)(1.25MB)】

    本书《基于JBOSS的J2EE开发》由罗时飞编写,是一本被广泛认可的经典著作,深入浅出地介绍了如何使用JBOSS作为应用服务器来开发J2EE应用。 #### 二、J2EE与JBOSS简介 1. **J2EE**:J2EE定义了一系列服务和技术标准...

    掌握EnterpriseJavaBean.pdf

    《掌握Enterprise JavaBeans》不仅是一本深入浅出的技术书籍,也是企业级Java开发者的必备参考。它覆盖了EJB的所有关键方面,从基础概念到高级主题,为读者提供了全面的理解和实用的指导。对于那些希望深入了解EJB并...

    Manning - EJB3 in Action

    综上所述,《Manning - EJB3 in Action》是一本深入浅出地介绍EJB 3.0 技术的优秀书籍,适合希望深入了解并掌握EJB 3.0 开发技巧的开发者们阅读。无论是对于EJB 3.0 的初学者还是有一定基础的开发者来说,这本书都...

    Java开发利器Myeclipse全面详解

    这本书深入浅出地介绍了Myeclipse的各项功能,旨在帮助Java程序员提高开发效率,提升编程技能。 Myeclipse是基于Eclipse平台的商业级Java集成开发环境,因其强大的功能和对Java EE应用的广泛支持而备受青睐。书中...

    spring开发指南

    《Spring开发指南》是针对Java开发者的一份详尽教程,旨在深入浅出地解析Spring框架的基础与高级特性,帮助读者全面掌握Spring的核心理念和技术。Spring是Java企业级应用中的基石,以其灵活的依赖注入、AOP(面向切...

    JavaEE学习资料

    ### Java EE 学习资料:...它不仅全面介绍了 Java EE 7 的新特性,还通过具体的案例深入浅出地展示了 Java EE 技术的实际应用。对于想要学习 Java EE 或者希望提升 Java EE 技能的人来说,这份文档具有很高的参考价值。

    新手如何学习java(java学习建议路线图).pdf

    推荐的初学者视频教程有孙鑫和张孝祥的课程,他们深入浅出地讲解了Java基础知识。 在掌握了J2SE之后,可以逐步过渡到J2EE(Java 2 Platform, Enterprise Edition)。J2EE用于开发企业级应用,涉及更复杂的系统集成...

    Manning.EJB.3.in.Action.Apr.2007.rar

    在《EJB 3 in Action》这本书中,作者深入浅出地介绍了EJB 3.0的各个方面,包括以下几个关键知识点: 1. **实体Bean(Entity Beans)**:EJB 3.0中的实体Bean不再需要复杂的EntityHome和EntityBean接口,而是采用了...

    泰牛程序员 韩顺平 JavaEE全套 第15部分 Struts2基础入门

    他所编写的JavaEE全套教程以深入浅出的方式讲解了JavaEE的核心技术和应用实践,深受广大开发者喜爱。其教程的特点包括: 1. **系统全面**:涵盖了JavaEE的核心技术栈,如Servlet、JSP、Hibernate、Spring、Struts2...

    EJB编程及J2EE系统架构和设计

    该文从J2EE的四个主要层面——客户端层(Client Tier)、Web层(Web Tier)、业务层(Business Tier)以及企业信息系统层(Enterprise Information System Tier)入手,深入浅出地解释了J2EE平台的关键技术和开发实践。...

    腾科Java EE培训教材:框架技术之spring(学生版)1

    本教材主要针对初学者,深入浅出地介绍了Spring框架的基础知识和关键特性。 1. Spring入门 Spring作为一个全面的Java应用开发框架,提供了包括依赖注入(Dependency Injection,简称DI)、面向切面编程(Aspect-...

Global site tag (gtag.js) - Google Analytics