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

深入浅出JMS(二)——JMS的组成

    博客分类:
  • JMS
 
阅读更多

http://blog.csdn.net/aking21alinjuju/article/details/6071123

JMS Provider

      实现了JMS规范的消息系统,该系统还提供必须的用于管理和控制全方位的功能,如这里的ActiveMQ。

Administered Objects

      Administered Objects是预先配置的JMS对象,由系统管理员为使用JMS的客户端创建,如ConnectionFactory、Destination。JMS被管理的对象是包含JMS配置信息的对象,这些对象由JMS管理者创建,并且最终由JMS客户端使用。

      由于有很多JMS消息系统,它们的底层实现技术各不相同,比如Sun MQ、IBM MQ、BEA MQ、Apache ActiveMQ,那么如何使得JMS客户端针对这些消息系统编程时能够隔离这些产品的变化而具有跨平台特性呢?就是通过定义被管理的对象来实现。被管理的对象是由管理员通过使用JMS系统提供者的管理工具创建和定制,然后被JMS客户端使用。JMS客户端通过接口来调用这些被管理的对象,从而具备跨平台特性。

      主要有两个被管理的对象:ConnectionFactory、Destination

ConnectionFactory

      这是客户端用来创建同JMS服务提供者之间的连接的对象。

Destination

      这个对象是客户端用来指明消息被发送的目的地以及客户端接收消息的来源。被管理的对象一般被管理员放在JNDI名字空间中,通常在JMS客户端应用的文档中说明它所需要的JMS被管理对象,以及应以何种JNDI名字来提供这些JMS被管理对象。

JMS客户端

      这些客户端程序通过使用JMS提供的API,来创建发送和接收消息的Java语言程序,即消息生产者和消息消费者。

消息生产者

      客户端使用MessageProducer向目的地发送消息。用Queue或者Topic对象作为参数来调用session对象的createProducer方法来创建MessageProducer。

      客户端也可以选择创建没有目的地的生产者。这种情况下,目的地对象必须传给每个发送操作。这种方式的一个典型用法就是生产者被用来发送回复请求时,使用请求的JMSReplyTo目的地。

      客户端可指定由生产者发出的消息的缺省的传送模式、优先级、存活周期。每次客户端创建MessageProducer,它就定义了新的消息系列,这些消息与以前发送的消息没有顺序关系。

消息消费者

      客户端使用MessageConsumer接受来自于目的地的消息,MessageConsumer通过向Session的createConsumer方法传递Queue或Topic来创建。

      消费者可以被带有消息选择器的方式来创建。这使得客户端可以限制传送给消费者的消息必须同选择器相匹配。客户端既可以同步获取消费者的消息,也可以使提供者在消息到达时异步传送消息。

Synchronous Delivery 同步传送

      客户端可以使用MessageConsumer的receive方法请求下一个来自于MessageConsumer的消息。Receive有几种变化允许客户端poll或者wait下一个消息。

Asynchronous Delivery 异步传送

      客户端可以注册一个用MessageConsumer来实现JMS MessageListener接口的对象。当消息达到了消费者时,提供者通过调用监听器的onMessage方法来传送它们。可能监听器会抛出RuntimeException异常,但是这主要考虑到的是客户端程序错误。良好的监听器应当捕捉这些异常并且尝试将这些消息转向发给一些应用指定的某些形式的“不可处理消息”的目的地。

监听器抛出RuntimeException的结果取决于会话的确认模式:

n AUTO_ACKNOWLEDGE or DUPS_OK_ACKNOWLEDGE

      消息将被立即重发。在放弃之前的重发的次数取决于提供商。在这种情况下,JMSRedelivered 消息头字段将设置在被重发的消息中。

n CLIENT_ACKNOWLEDGE

      监听器的下一个消息将被传送。如果客户端希望是前面未确认的消息重新发送,它必须手工恢复会话。

n Transacted Session

      监听器的下一个消息被发送,客户端可以提交或者回滚会话。(换句话说,RuntimeException不会导致会话的自动回滚)JMS服务提供者应当将消息监听器抛出异常的客户端标记为“可能的障碍”。

Message

      用于在客户端之间进行通讯的消息,消息系统的核心当然是消息。JMS 为不同类型的内容提供了几种消息类型,但所有消息都是从 Message 接口派生出来的。

消息类型

说明

常用方法概览

TextMessage

文本消息

getText,setText

MapMessage

映射消息

setString,getString

BytesMessage

字节消息

writeBytes,readBytes

StreamMessage

流消息

writeString,readString

ObjectMessage

对象消息

setObject,getObject

 

                                                         表 常用消息类

Message 分为三个组成部分:

Header

      是一组标准字段,客户机和提供者都用它们来标识和路由消息。

Properties

      提供了一个给消息添加可选标题字段的实用工具。如果应用程序需要用标准标题字段没有提供的方法对消息进行归类或分类,那么可以为消息添加一个属性来实现这种归类和分类;提供了 setProperty(...) 和 getProperty(...) 方法来设置和获得各种 Java 类型的属性,其中包括 Object。JMS 定义了提供者可以选择性提供的一组标准属性。

Body

      包含将发送到接收应用程序的内容。每一个消息接口都专用于它所支持的内容类型。

下面列出了 Message 的每一个标题字段的名称、它对应的 Java 类型和字段的描述:

JMSMessageID——类型为 string

      惟一标识提供者发送的每一条消息。这个字段是在发送过程中由提供者设置的,客户机只能在消息发送后才能确定消息的 JMSMessageID。

      JMSDestination——类型为 Destination

      消息发送的 Destination,在发送过程中由提供者设置。

JMSDeliveryMode—类型为 int

      包含值 DeliveryMode.PERSISTENT 或者 DeliveryMode.NON_PERSISTENT。持久性消息被传输并且只被传输一次,非持久性消息最多被传输一次。要知道“最多一次”包括根本不传输。非持久性消息在应用程序或者系统出故障时被提供者弄丢。因此要格外小心,确保持久性消息不受故障的影响。这比开销通常被认为是发送持久性消息方面的开销,在决定消息的发送模式时,必须仔细考虑,在可靠性和性能之间进行权衡。

JMSTimestamp——类型为 long

      提供者发送消息的时间,由提供者在发送过程中设置。

JMSExpiration——类型为 long

      消息失效的时间。这个值是在发送过程中计算的,是发送方法的生存时间(time-to-live)值和当前时间值的和。提供者不应发送过期的消息。值 0 表明消息不会过期。

JMSPriority——类型为 int

      消息的优先级,由提供者在发送过程中设置。优先级 0 的优先级最低,优先级 9 的优先级最高。

JMSCorrelationID——类型为 string

      通常用来链接响应消息与请求消息,由发送消息的 JMS 程序设置。响应来自另一个 JMS 程序的消息的 JMS 程序将正响应消息的 JMSMessageID 拷贝到这个字段中,这样,正作出响应的程序就可以与它所发出的特定请求的响应相关联。

JMSReplyTo—类型为 Destination

      请求程序用它来指出回复消息应发送的地方,由发送消息的 JMS 程序设置。

JMSType—类型为 string

      JMS 程序用它来指出消息的类型。一些提供者维护着一个消息类型仓库,并用该字段引用仓库中的定义类型,在这里,JMS 程序不应该使用这个字段。

JMSRedelivered——类型为 boolean

      指出消息被过早地发送给了 JMS 程序,程序不知道消息的接收者是谁;由提供者在接收过程中设置。

分享到:
评论

相关推荐

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

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

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

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

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

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

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

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

    Java JDK 6学习笔记——ppt

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

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

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

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

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

    从Java菜鸟到专家的资料

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

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

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

    掌握EnterpriseJavaBean.pdf

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

    Java开发利器Myeclipse全面详解

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

    Java帮助.rar

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

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

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

    spring开发指南

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

    Manning - EJB3 in Action

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

    JavaEE学习资料

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

    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接口,而是采用了...

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

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

    泰牛程序员 韩顺平 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平台的关键技术和开发实践。...

Global site tag (gtag.js) - Google Analytics