内容简介
书籍 计算机书籍
现阶段的分布式应用开发,包括多层架构、SOA、Web Service、网格甚至云计算等,一般不必从网络通信底层做起,大都基于如CORBA/IIOP、DCOM、RMI、JMS及IBM MQ、TIBCO消息中间件等成熟工具或协议实现,而其核心内容都是消息技术及体系。而绝大多数分布式技术方面的资料要么只是介绍成熟工具和协议的使用方法,要么便是介绍网络通信底层知识,而对介于这两者之间的消息技术的内在原理和详细实现机制,则很少有人真正了解与问津,而这正是本书的重点内容。
本书详细披露了消息体系的内在原理与实现机制:如何以消息对象形式组织各种复杂数据类型?消息如何从一台机器传送到另一台机器?如何通过消息实现远程过程调用?如何实现跨平台的分布式消息通信?多种类型的消息如何管理?消息队列如何管理?企业级的多任务并发如何控制?如何保证大量的消息与任务都会被及时处理?如何合理利用系统资源?JMS与SOAP的机制有什么区别和联系等,都是本书要讲述的内容。本书紧密结合代码实例,基于面向对象设计与实现方法,旨在通过本书指导可自行设计开发消息体系原型。
作译者
何小朝,工学博士,北京大学计算机系博士后,第一届中国软件业十大杰出青年候选人,专著《不是三维——软件项目的设计、开发与管理》,第十六届世界计算机大会电子商务大会数据管理分会主席,中国青年科技工作者协会第二届会员,中国航空史研究会会员,中小企业创新基金评审专家。作者从1992年起从事软件的设计、开发与管理工作,自2002年起,在北美从事软件系统分析与设计工作近七年之久。迄今为止,共负责、参与国内外大中型软件项目20多项,涉及网络与分布式系统、数据管理、嵌入式系统及工业设计与生产等领域,历任中国大中型IT企业总工程师、技术管理部部长、事业部副总经理、BI首席架构师、软件开发总监及北美PPMC技术总监等职。共在国内外发表科技论文30余篇,多篇获奖,并被美国《工程索引》(The Engineering Index,简称EI)检索6篇。
目录
《消息设计与开发—分布式应用开发的核心技术》
第1章 消息技术概论 1
1.1 TCP/IP简介 1
1.1.1 基本知识 1
1.1.2 TCP与UDP 2
1.1.3 TCP/IP套接口编程基础 4
1.2 什么是消息 12
1.3 最原始的消息设计 14
1.3.1 原始消息的设计与实现 14
1.3.2 原始消息设计方法分析 17
1.4 消息技术的内容 19
1.5 消息技术的分类 21
1.5.1 基于传输协议分类 22
1.5.2 基于消息传输格式分类 24
1.6 关于本书内容的说明 25
1.7 消息体系的组成 26
1.8 本书相关术语定义 27
1.9 本章小结 28
第一大类 基于字节流的消息技术 29
第2章 消息表示法 30
2.1 消息表示需求分析 30
2.1.1 需求分析 30
2.1.2 消息表示法的内容 32
2.2 消息的总体结构 32
2.2.1 消息组成要素 32
2.2.2 代码层面消息结构 33
2.2.3 传输层面(流化后)消息结构 35
2.3 消息头 36
2.3.1 消息版本号 36
2.3.2 消息序列号 38
2.3.3 消息延续标志 38
2.3.4 消息数据长度 39
2.4 消息类型块 40
2.4.1 消息响应与功能类型 41
2.4.2 回复消息错误 41
2.4.3 消息远程调用操作类型 43
2.4.4 消息处理标志 43
2.4.5 消息体长度 44
2.4.6 消息类型块的组成标准 45
2.5 消息体 46
2.5.1 消息体构成 46
2.5.2 消息体公共接口定义 49
2.5.3 消息描述信息定义 50
2.5.4 消息本体数据 51
2.5.5 消息列表数据 52
2.5.6 消息创成接口 52
2.5.7 消息流化接口 53
2.6 消息表示的面向对象实现 54
2.6.1 消息头 55
2.6.2 消息类型块 56
2.6.3 消息体 58
2.6.4 消息表示法代码结构 75
2.7 本章小结 76
第3章 消息的流化 77
3.1 什么是流化 77
3.2 流化表示法综述 78
3.2.1 自定义字节流 78
3.2.2 XDR表示法 79
3.2.3 平台无关 83
3.3 消息流化的基本元素 90
3.3.1 流化的基本元素 90
3.3.2 数值型 91
3.3.3 二进制字节流 94
3.4 流化的面向对象实现 95
3.4.1 消息流化的实现过程 96
3.4.2 XDR方法类 96
3.5 本章小结 102
第4章 消息注册 103
4.1 消息注册综述 103
4.1.1 消息注册的目的 103
4.1.2 消息注册的实现 104
4.1.3 消息注册的内容 104
4.2 消息创建接口 105
4.2.1 消息创建接口的用途 105
4.2.2 消息创建接口的面向对象实现 106
4.3 消息操作类型接口 107
4.3.1 消息操作类型接口的用途 107
4.3.2 消息操作类型接口的面向对象实现 108
4.4 回调函数注册 108
4.5 本章小结 109
第5章 单消息的发送与接收 111
5.1 单消息发送与接收的内容 111
5.2 消息发送 112
5.2.1 消息发送触发的假设 112
5.2.2 消息发送预处理 113
5.2.3 消息发送过程 116
5.2.4 消息发送的面向对象实现 117
5.3 消息接收 124
5.3.1 消息接收触发的假设 124
5.3.2 消息接收过程 126
5.3.3 消息接收中的消息回复 127
5.3.4 消息接收的面向对象实现 129
5.4 消息加密与解密 143
5.4.1 消息加解密设计 143
5.4.2 套接口层面的接口调用 144
5.4.3 消息加解密的面向对象实现 146
5.4.4 算法库选择 148
5.5 套接口控制 148
5.5.1 套接口控制的内容 149
5.5.2 发送与接收管理 149
5.5.3 缓冲区管理 157
5.5.4 套接口选择器 162
5.6 UDP消息的发送与接收 162
5.7 本章小结 164
第6章 单连接上的消息管理 165
6.1 TCP连接与消息管理类 165
6.2 消息发送与接收管理 168
6.2.1 连接管理线程 168
6.2.2 消息发送类型 169
6.2.3 消息发送控制 176
6.2.4 发送与接收协调 180
6.3 消息请求处理管理 182
6.4 消息队列管理 183
6.5 消息生命周期管理 185
6.6 本章小结 187
第7章 单连接上的消息请求处理 188
7.1 请求处理的触发 188
7.1.1 原始设计与分析 188
7.1.2 设计改进与请求处理线程 189
7.1.3 TCP连接与请求处理线程 190
7.2 回调函数注册与消息请求管理类 191
7.3 请求处理过程 193
7.3.1 总体流程 193
7.3.2 请求处理中的消息回复 194
7.4 回调函数调用再探 196
7.4.1 原始设计 196
7.4.2 设计改进与用户执行线程 197
7.5 本章小结 198
第8章 多连接下的消息体系管理 199
8.1 多连接消息体系管理综述 199
8.1.1 需求分析 199
8.1.2 原始设计与分析 201
8.1.3 多连接管理设计的内容 202
8.2 连接管理线程池 203
8.2.1 连接管理设计 203
8.2.2 连接管理线程池 204
8.2.3 连接管理的面向对象实现 205
8.3 请求处理线程池 210
8.3.1 请求处理管理 210
8.3.2 请求处理线程池 212
8.3.3 请求处理管理的面向对象实现 213
8.3.4 一个特殊问题的讨论 215
8.4 连接清理线程池 216
8.4.1 连接清理管理 216
8.4.2 连接清理线程池 218
8.4.3 连接清理管理的面向对象实现 219
8.5 套接口选择器(TCP连接管理类选择) 222
8.5.1 套接口选择器设计 222
8.5.2 套接口选择器的面向对象实现 225
8.6 KeepAlive管理 232
8.6.1 KeepAlive线程 232
8.6.2 KeepAlive的面向对象实现 233
8.7 多连接管理总体控制 237
8.7.1 主管类 237
8.7.2 多连接管理代码结构 240
8.8 本章小结 241
第9章 消息体系中的本地化 242
9.1 什么是本地化 242
9.2 本地化方法综述 243
9.3 消息体系中的本地化实现 245
9.3.1 设计思路 245
9.3.2 消息体系的本地化实现 245
9.4 本章小结 250
第10章 消息的制造 251
10.1 综述 251
10.2 消息手工制造 252
10.3 消息生成器 253
10.4 消息版本管理 253
10.5 消息克隆(clone) 255
10.6 本章小结 257
第二大类 基于XML的消息技术 259
第11章 XML消息表示法 260
11.1 XML消息表示概述 260
11.1.1 XML消息的特点 260
11.1.2 XML消息表示需求分析 261
11.2 XML消息总体结构 261
11.2.1 XML消息表示总体设计 261
11.2.2 XML消息模板与消息注册 263
11.2.3 XML消息实例 267
11.3 XML消息中的各种数据类型 268
11.3.1 整型、浮点型与字符串型 269
11.3.2 对象 270
11.3.3 数组 271
11.4 二进制数据处理 272
11.5 本章小结 273
第12章 XML消息的发送与接收 274
12.1 单连接上的消息发送与接收 274
12.1.1 套接口层的发送与接收 274
12.1.2 消息实例的生成与解析 274
12.2 多连接管理 280
12.3 XML消息的加密、解密 282
12.4 本章小结 283
第13章 XML消息的处理 284
13.1 消息处理模板 284
13.1.1 消息处理模板的概念 284
13.1.2 消息处理模板的初始化 285
13.2 XML消息处理过程 288
13.2.1 总体设计 288
13.2.2 接口匹配 288
13.2.3 参数填充 289
13.2.4 动作执行 291
13.2.5 回复生成与返回 291
13.3 XML消息处理路径 292
13.3.1 数据库或函数 293
13.3.2 本地链接库 293
13.3.3 Web Service 295
13.4 本章小结 296
第14章 高级功能 297
14.1 消息转发 297
14.2 消息链接 298
14.3 大消息处理 299
14.4 本章小结 299
后 记 301
前言
目前,分布式系统的应用领域越来越广泛,包括多层体系架构、多服务系统(SOA)、Web Service、网格(Grid)甚至目前最流行的云计算等,都属于分布式应用的范畴。如何设计与实现分布式系统,也是软件开发技术的重要内容。国内目前熟练掌握该项技术的软件开发人员远远要比掌握如JSF/Spring/Hibernate或SSH(Struts/Spring/Hibernate)等多层门户网站开发技术的人员要少得多。
最早的分布式开发,都是基于网络通信底层接口(如套接口、RPC等)直接进行的,而到了今天,绝大多数的分布式开发都是在成熟的协议或产品基础上开展的,包括CORBA/IIOP、RMI、JNDI/EJB、JMS、SOAP以及各种消息中间件,如IBM MQ、TIBCO、TUXEDO等。但即使是那些为数不多的熟练掌握这些开发技术的人,其中多数也只是会使用它们提供的API来制作应用系统,而对其内在原理和详细实现机制,则很少有人真正了解与问津。
让我们仔细想一想,在CORBA、RMI或JMS中,从一台计算机上的服务程序远程调用另一台计算机上服务程序中的函数是如何实现的?以消息对象形式组织的各种复杂数据类型如何从一台计算机传送到另一台计算机?如何在两个不同体系的软、硬件环境中实现分布式交流?多种不同类型的消息如何有效管理?发送与接收的消息队列如何管理?多任务并发如何控制?多任务并发时如何保证网络不会在某一点阻塞而影响对其他消息的处理?JMS和SOAP的机制有什么区别与联系?
所有以上问题,其实都牵扯到了一个很重要的领域,那就是:消息技术。目前,无论是在国内,还是在国外,介绍消息技术的技术资料都很少,这些资料大都存在于一些先进的分布式应用开发组织或者分布式开发支撑技术提供组织内部的源代码中或内部技术资料中,没有机会参与这些项目的软件技术人员是没有机会了解并掌握该项技术的。
消息技术的实现非常复杂,远不止一般技术人员想象的如流化(序列化)、发送与接收那么简单(像这样做个小例子还可以,要用于像JMS那样能支持开发大型分布式系统就完全不可能了),一般就算亲自参与该项技术的设计与开发,也需要最少两三年的时间才能完全掌握。而作者根据自身的经验体会到,对消息体系的深入理解会大大提高软件人员的设计能力与开发技能,并且在很多牵扯较深层次的软件开发中,了解甚至自己开发消息体系非常关键。因此,拥有一本介绍消息技术的书是很有意义的。
本书会体系化地详细介绍分布式应用开发的核心技术——消息机制,作者希望能达到这样一种效果:即读者参阅本书后,不仅能对消息技术的内在原理与实现机制全面地了解与深入学习,更重要的是,一个技能熟练的开发人员,能够根据书中足够详细的介绍(包括一些示例代码),自行开发出一套完全可以运作的消息平台来,这便是本书编写的原则与目标。
本书错误之处在所难免,敬请各位读者批评指正。
何小朝
ageneral_he@hotmail.com
2011年6月
序言
随着X86服务器的普及使用,以及基于Linux和Windows操作系统在服务器上的主流使用,分布式计算,包括网络计算,和云计算,已经成为企业应用软件的主流模式。分布式应用软件的开发常常需要中间件的支持。基于消息的中间件(MOM)是使用最为广泛的中间件类型之一。如何正确和有效地使用这些中间件不仅影响到开发人员的编程效率,也在很大程度上决定了软件的结构和性能。
本书深入浅出的介绍了消息中间件的概念、原理和实现机制,并从软件开发人员的角度出发,详细描述了消息设计、消息传输中的数据类型的表示以及消息的发送、接受及其管理方式。本书对于从事分布式应用软件设计和开发的人员具有很好的入门指导作用和编程参考作用。
王敬文
平台计算公司产品副总裁
序二
初次看到何小朝博士送来的这本新书稿时,我感到惊讶!老实说,在国内,像这种原创性的、体系化的、完整介绍一种重要技术领域的书籍非常少!看过作者的上一本书《不是三维》后,感到何小朝博士有深邃的思想,精辟独到的见解和丰富的软件设计管理经验,在读过这本书之后,更是真正见识到了他深厚扎实的技术功底!
分布式技术的应用领域非常广泛,如Web门户、SOA、Web Service、网格乃至流行的云计算等,都属于其范畴之内。在很久以前,进行分布式技术开发时,程序员都是直接在通信接口(如Socket套接口、RPC等)之上开发的。发展到今天,绝大多数的分布式开发都可以基于成熟的协议或产品进行,如JMS、RMI、CORBA/IIOP,以及消息中间件IBM MQ、TIBCO等。总的来讲,这些协议与产品都属于消息体系,同时,市面上介绍这些产品和协议如何使用的书籍也很多,但是,正如作者所说,到目前为止,详细介绍消息体系内核技术的书籍几乎没有,在国外也很少见到。我想,如果不是作者本人曾有机会亲自深入参与过该项技术内核的设计与开发,是很难写出这样一本书的。因此,这本书非常有价值,其出版也非常有意义。
本人同意作者的观点,虽然大多数分布式开发可以基于成熟的消息体系进行,但对于一个软件设计师及程序员来讲,深入了解消息体系的内在原理和详细工作机制,无论是对提高个人设计能力和技能水平,还是对现实的软件开发,都有着重要的意义。
我愿意向广大读者推荐这本书!
北京大学教授欧亚科学院院士
2011年3月
媒体评论
消息是企业现代IT架构中必不可少的重要组成部分,它使大规模分布式系统的规划与建设成为可能。相信通过阅读本书深入了解消息体系的内在原理与机制,从而能够使技术人员的设计能力与专业技能得到较大的提升。
金麟 北京先进数通技术有限公司EDI部总经理
消息技术与体系是分布式应用开发的核心内容,何小朝博士的这本书从非常实用的角度,通过大量的案例,详细阐述了消息技术系统的内在原理与实现机制,帮助从事分布式应用的软件开发人员知其然,更知其所以然。事实上,对任何事情来说,了解其原理与内在机制比掌握技巧要重要得多,分布式应用开发亦是如此。相信通过研读这本书,可以帮助读者更深刻地了解消息技术体系的各种要素、相互关系与机制。
王闯舟 东南融通副总裁
随着云计算、物联网和社会网络技术的不断发展与推广,分布式应用迅速发展,而消息体系是分布式应用的核心,由于消息机制的稳定性、可靠性直接影响到应用的运行,特别是互联网的突发海量并发特征,使得消息体系的产品特别抢眼。IBM、Oracle、Tibco等厂家也为此进行大肆渲染,市面充斥着大量的产品介绍与应用的书籍与文章,很难见到研究消息体系、消息机制的好书和好文章。只有在深入理解消息实现的原理与技术之后,才能充分利用其特征,开发出具有核心竞争力的好软件产品。
杨准 华胜天咸CTO
现代企业应用越来越多的发布于高负荷环境中,多层分布式集群架构的使用日渐广泛,而对各分布结点之间的数据同步问题来讲,消息的作用至关重要。希望通过对该书中消息运行机制的学习,能够帮助读者更深入地理解消息技术,从而充分利用它为企业应用实践服务。
陈铭新 中国建设银行厦门开发中心总工
【插图】