基本信息
- 原书名:Java Message Service
- 原出版社: O'Reilly Media
- 作者: Mark Richards Richard Monson-Haefel David A.Chappell
- 译者: 闫怀志
- 丛书名: 电子工业出版社O'Reilly系列
- 出版社:电子工业出版社
- ISBN:9787121100505
- 上架时间:2010-1-12
- 出版日期:2010 年1月
- 开本:16开
- 页码:305
- 版次:2-1
- 所属分类:计算机 > 软件与程序设计 > JAVA(J#) > Java
编辑推荐
深入浅出解读JJMS和消息传送机制关键技术
具体实例讲解标准API
解剖JMS1.1最新技术热点
内容简介
计算机书籍
本书深入浅出地讲解了JMS1.1规范的底层技术、Java类和接口、编程模型及其不同实现等Java消息服务(JMS)和消息传送机制关键技术。通过对支持点对点和发布/订阅“消息传送”的标准API的完全解读及具体实例,介绍了如何利用“厂商无关”的JMS来解决许多体系结构面临的挑战。本书适用于掌握Java语言并有业务解决方案开发经验的读者,或者需要学习消息传送技术的读者。
《Java消息服务(第2版)》是对支持“消息传送”的标准API的完全解读,所谓“消息传送”就是跨网络计算机的软件对软件的关键数据交换。您将学到如何利用JMS来解决许多体系结构的挑战,比如集成不同的系统和应用程序、提高可伸缩性、解决系统瓶颈、支持并发处理,以及提升灵活性和敏捷性等。
作为适用于JMS1.1的修订版,第2版还说明了这个“厂商无关”的规范如何有助于使用IBM的MQ,Progress Software的SonicMQ、ActiveMQ,以及其他多种专有消息传送服务来编写基于消息传送的应用程序。
使用Java消息服务,您可以:
·使用点对点和发布/订阅消息传送模型构建应用程序。
·使用会话和持久订阅等特性确保应用程序可靠。
·使用消息传送bean在Enterprise JavaBeans(EJB)内实现消息传送。
·与RESTful应用程序及Spring应用程序框架一起使用。
消息传送是一个功能强大的范式,易于实现企业级应用程序不同部分的解耦。《Java消息服务(第2版)》可以快速教会您如何使用消息传送机制的关键技术。
作译者
Richard Monson-Haefel,O'Reilly出版的Enterprise JavaBeans和Java Message Service,First Edition两本书的合著者之一,企业计算领域全球领先的专家。
David A.Chappell,Oracle公司副总裁兼SOA首席技术专家,O'Reilly出版的Java Web Services和Java Message Service,First Edition两本书的合著者之一。
目录
前言 III
第1章 消息传送机制基础 1
1.1 消息传送机制的优点 3
1.1.1 异构集成 3
1.1.2 缓解系统瓶颈 3
1.1.3 提高可伸缩性 4
1.1.4 提高最终用户生产率 4
1.1.5 体系结构灵活性和敏捷性 5
1.2 企业消息传送 5
1.2.1 集中式体系结构 7
1.2.2 分散式体系结构 7
1.2.3 混合体系结构 8
1.2.4 以集中式体系结构作为模型 8
1.3 消息传送模型 9
1.3.1 点对点模型 10
1.3.2 发布/订阅模型 10
1.4 JMS API 11
1.4.1 点对点API 13
1.4.2 发布/订阅API 14
译者序
获邀担纲《Java消息服务(第2版)》的翻译,我的思绪一下回到了10年前。当时,不仅是初出茅庐的我,甚至很多资深的同行,都在为不同系统之间的信息交换而头疼不已:一方面,数据集成和系统整合的需求非常旺盛;另一方面,信息交换的技术实现不仅难度很大,而且实现方式也因各有利弊而难于选择。在技术路线的选择上,我们究竟何去何从?这在“雾里看花”的当年,真不啻于一场赌博。因为后来的事实证明,即便是其中较为常用的CORBA、DCOM、RMI等远程过程调用(RPC)中间件技术,虽可以解决一些问题,但它们在健壮性、性能和可伸缩性方面的表现很难让人满意。
期间,从我一位留美的同学处,偶然获悉了Java消息服务(JMS)机制,令我闻之一震——它很好地解决了让我困惑良久的在不同系统间进行数据和功能共享的问题。我不仅自己如获至宝,还因为职业的关系,在我的领地——三尺讲台上竭力传播这一思路。
简而言之,JMS是1999年由 Sun Microsystems领衔开发的一种访问消息系统的方法,也就是供Java程序员使用的面向消息的中间件(MOM)。这种基于消息传送的异步处理模型,具有非阻塞的调用特性。发送者将消息发送给消息服务器,服务器会在合适的时候再将消息转发给接收者;发送和接收采用异步方式,这就意味着发送者无须等待,发送者和接收者的生命周期也无需相同,而且发送者还可以将消息传给多个接收者。如此一来,这种异步处理方式就大大提升了应用程序的健壮性、性能和可伸缩性,使数据集成和系统整合工作变得易如反掌,特别是在分布式应用上让同步处理方式望尘莫及。Java消息服务作为一个与具体平台无关的API,已经得到了绝大多数MOM提供商的支持。
本书深入浅出地讲解了JMS规范的底层技术、Java类和接口、编程模型及其不同实现。尤其值得指出的是,当年我学习Java消息服务的启蒙教材正是O’Reilly在2000年出版的本书第1版。所以看到第2版,真是一见如故。较之9年前的第1版,除了著名的Richard Monson-Haefel和David A. Chappell之外,又有消息传送机制、面向服务体系结构和事务管理领域的公认权威Mark Richards来担纲第一作者。我在仔细研读之后发现,本版继承了初版的优点,但在内容及结构方面有了很大变化,某些地方甚至可以说是“质”变,究其原因主要有二:其一,初版两年后(即2002年3月)发布了JMS 1.1,统一了消息域,新版必须为适用JMS 1.1而修订;其二,经过10年的发展,Java平台和消息传送机制日臻完善,消息驱动bean、Spring消息框架、事件驱动体系结构(EDA)、面向服务体系结构(SOA)、RESTful JMS接口,以及企业服务总线(ESB)等新的消息传送技术也层出不穷。这些亮点不仅是第2版的精华所在,它们本身也代表了Java消息服务技术的发展方向。
当然,任何一项技术都是有利有弊的,也都会经历发展、鼎盛直至消亡的生命旅程,Java消息服务也不例外。毋庸讳言,近些年来在异构系统集成领域,Java消息服务就遭到了Web服务的强力挑战。不过,在Web服务解决可靠性等问题之前,Java消息服务仍然是异构系统集成的不二之选。我相信,如果您读完了本书,并切实领会了JMS的精髓和要义之后,会十分认同这个观点。
翻译一本书,弄不好就会是“出力不讨好的苦差”,因为无论是技术本身、原著水平、读者领悟力等哪个环节出了问题,板子通常都会打在翻译者身上。当然就本书而言,JMS技术本身、原著的水平和读者的领悟力都不会有什么问题。所以,既然我愿意做这样的知识传播者,那就要勇于承担所有的责任。套用我所敬仰的一位长者之言:我只希望在我翻译完以后,全体读者能说一句,他是一个负责的译者,不是敷衍了事的译者,我就很满意了。如果他们再慷慨一点,说闫怀志某些地方译得还不错,我就谢天谢地了。
本书翻译期间得到了电子工业出版社博文视点公司徐定翔、白爱萍、杨绣国、陈元玉、许莹等编辑的热心帮助。书中绝大部分术语采用了Sun公司的标准译法,在此一并致谢。最后,我要感谢家人的支持,否则完成这样一项工作几乎是不可想象的。由于译者水平有限,加之时间较紧,虽已尽力避免错误,难免仍有疏漏,恳请广大读者将意见和建议发至:bityhz001@sina.com,不胜感激。
闫怀志
2009年秋于北京中关村
推荐序
近十年来,我逐渐变成了基于消息传送系统的铁杆粉丝。这种系统所提供的可靠性、灵活性、扩展性及模块化程度,实为传统RPC或分布式对象系统所不及。使用基于消息传送的系统只须些许调整,因为它们的行为方式与体系结构师或设计师所期望的传统n层系统截然不同。这并不是说基于消息传送的系统更好抑或更差,它们仅仅是不同而已。这时候不再是直接调用对象的方法(这时对象能够保持会话状态或上下文),而是要求消息自身必须是自包含的而且是状态完备的。
这就提出了一个重要问题。
任何特定的开发人员使用任何特定的技术,都会有4个明显不同的阶段。
首先是门外汉(Ignorant)阶段。此时,我们只知道该技术存在与否,除此以外,对其能力一无所知。它充其量是经常和其他技术一起提及的一个字母组合,既可能和我们的日常工作十分相关,也可能无关紧要。
第二是探索者(Explorer)阶段。无论自愿与否,由于有某些东西激发了我们的好奇心和求知欲。我们开始迈出丛林探险的第一步,可能是下载一个实现,也可能是阅读几篇文章。开始了解这项技术在更大范围内的基本框架定位及其大致工作方式,不过,我们的实战经验通常仅限于诸如“Hello World”和为数不多的其他例子而已。
第三是熟手(Journeyman)阶段。在运行了一些例子和阅读过几篇文章后,我们对它有了些基本了解,并尝试使用它编写代码。感到用它生成代码并调试所犯的低级错误会非常轻松。无论如何,我们不是专家,但是至少能够写出个东西来编译,并且它在大多数时间可以运行。
最后是大师阶段。在构建一些系统并了解它们的实际运行情况后,我们会对该工具或技术有全面、深入的认识,甚至经常是没有运行代码也能够预知它会如何作用。我们会看到它如何与其他技术取长补短,并了解如何实现一些令人不可思议的效果,比如能够抵御网络运行中断或机器失效等。回溯到1999年Java消息服务(JMS)API初次发布时,它并无任何非商业/开源实现可用,我还清晰地记得当时我边看边想:“不错,它看起来令人很感兴趣,但是没有真正实现,我就没法使用”,并把该规范印刷本放在一边供以后研读。几年之后,我进入JMS的探索者和熟手阶段,此时我开始领悟消息传送系统的功能,这一方面是因为有了一些实现,另一方面是因为我自己对其他消息传送系统(最多的是MSMQ和Tibco)的探索,但是主要应归功于Java消息服务第2版的作者。
时至今日,我依然愧称大师。所幸您和我都知道谁不是大师。
前言
我最初设想在新版中尽量保留原来的内容。不过,根据第1版编写以来JMS规范的变化,以及消息传送新技术的研发情况,只好大量缩减原来的内容。结果您会发现,第2版中有75%左右是新内容,或者是修订的内容。
在本书第1版付印后两三年内,JMS规范就升级到了1.1版。尽管新版本对JMS规范并没有做重大修改,它仍然在解决原JMS规范某些缺陷方面迈出了重要的一步。该规范最大的变化之一是在统一的公共API基础上增加了队列和主题API,允许队列和主题共享同一事务性工作单元。不过,单单规范的发展并不是促成本书修订出第2版的唯一因素。由于Java平台已经成熟,相应地,消息传送的方式也已经成熟。从新的消息传送技术和框架,到复杂的集成和吞吐量需求,消息传送机制已经改变了我们考虑和设计系统的方式,特别是在过去的10年中更是如此。正是这些因素,加上JMS规范的发展,促成了本书第2版的问世。
除了第2章中的Chat应用程序以外,全书所有示例代码均已修改,以反映更新的消息传送用例和阐释第1版中未曾包括的一些JMS附加特性。
由于显而易见的原因,我在新版中增加了几章内容。您会发现第1章新加了几小节,主要是关于JMS API、更新的消息传送用例及讨论消息传送如何改变系统设计方式。您还会发现关于消息过滤、Java EE和消息驱动bean、Spring JMS、消息驱动POJO及消息传送设计的几章新内容。
除了增加新章之外,我还对现有各章做了大幅修订。由于更新了全书多个要点的示例代码,所以,我必须逐一大量重写对应的正文。这恰好为我提供了增加另外的小节和议题的机会,尤其是对于第4章的点对点消息传送模型和第5章的发布/订阅消息传送模型来说,更是如此。我还调整了第1版中这两章的顺序,因为我相信,使用队列的点对点消息传送模型更容易深入领会消息传送的概念,而不是使用主题和订阅者的发布/订阅消息传送模型。
我衷心希望本书新版会有助于您更加全面地理解Java消息服务和消息传送机制。
—Mark Richards
谁应该阅读本书
Who Should Read This Book?
本书讲解并演示了Java消息服务的基础知识。它对于JMS规范的底层技术、Java类和接口、编程模型及其不同实现的讲解,既直观、简洁,又不失严谨、扎实。
虽然本书着重于讲解基础知识,但它并不是一本“傻瓜式”书籍。尽管JMS API易于学习,但API抽象却是相当复杂的企业级技术。在阅读本书之前,您应该熟练掌握Java语言,并有过一些开发业务解决方案的实践经验。我们并不要求您具备消息传送系统方面的相关经验,但是必须掌握Java语言的应用知识。
组织结构
Organization
全书共分为11章和4个附录。第1章介绍了消息传送系统、消息传送用例、集中式和分布式体系结构及JMS的重要性所在。第2章到第6章深入探讨了使用点对点和发布/订阅这两种消息传送模型开发JMS客户端的细节,包括如何使用消息选择器来过滤消息。第7章和第10章应被视为“高级议题”,其范围涵盖了消息传送系统的部署和管理等部分。第8章是有关JMS的Java 2企业版(Java EE)概览,包括作为企业级JavaBean(Enterprise JavaBeans,EJB)3.0规范一部分的消息驱动bean。第9章介绍了和消息传送有关的Spring框架(Spring Framework)。最后,第11章提供了对消息传送相关设计注意事项和反模式等诸多问题的深入思考。
第1章:消息传送机制基础
定义了企业消息传送和消息提供者使用的通用体系结构。本章还定义和讲解了JMS及其两种编程模型:发布/订阅模型和点对点模型。本章描述了消息传送机制的多个用例和实际场景,同时还介绍了JMS API的基础知识。
第2章:编写一个简单的示例程序
带领读者一起开发一个简单的发布/订阅JMS客户端。
第3章:深入剖析一条JMS消息
媒体评论
——Tim Berglund,August Technology Group总裁