企业集成模式.设计、构建及部署消息传递解决方
这篇书评可能有关键情节透露
Enterprise Integration Patterns : Design,Building,and Deploying Messaging Solutions
第0章 引言
0.1系统集成的四种方法:
(1) 文件传输--一个应用写文件,之后另一个应用读这个文件。为此,应用之间需要协商文件名、文件的位置、文件的格式、文件读写的时间以及谁负责删除这个文件。例如:平台Agent读写平台日志文件。读写Excel文件
(2) 共享数据库--共享数据库--多个应用共享相同的数据库,这个数据库位于独立的位置数据库中。由于不存在重复保存的数据资料,因此不必将数据从一个应用传送给另一个应用。凉山州公安系统与全球眼系统对接。福建网管与第三方故障系统对接共享中间库。CRM对接模式。
(3) 远程过程调用--一个应用开放其部分功能,使得其他应用能够远程访问这些过程。他们之间的通信是实时、同步的。例如:RPC\WebService调用\CRM对接方式。
(4) 消息传递--一个应用向公共消息通道中发布一个消息,其他应用可以在之后某个时间从通道中获得这个消息。应用之间必须写上协商建立通道以及消息的格式。这种通信是异步的。如:Email\IM下线后再上线可以收到之前没有查看的消息。
0.2什么是消息传递?
消息传递是一种能支持高速、异步、程序到程序间可靠通信的技术。程序之间通过发送数据包进行通信,这种数据包即成为消息(message).
通道(channel),也成为队列,是连接程序并传递消息的逻辑路径。通道的行为类似于消息集合或消息数组,但是它能在多台计算机之间神奇地共享,同时被多个应用使用。
发送消息的应用被称为发送者(sender)或生产者(producer),它把消息写到通道中。
从通道中读取(和删除)消息的应用成为接受者(receiver)或消费者(consummer).
消息是由两部分组成:消息首部和消息体。
消息首部包含消息的元信息--谁发送的消息、其目标是哪里等等,这一消息为消息传递系统所使用,使用消息的应用大多会忽略这些信息。
消息体包含实际传送的应用数据,这些信息通畅会被消息传递系统忽略。
0.3什么是消息传递系统?
消息传递能力是由一种单独的称为消息传递系统或面向消息中间件(Message-Oriented Middleware,MOM)的软件系统提供的。
为什么不直接 把数据发送给接收者,而是让应用把数据作为消息封装并存储在消息传递系统中,然后委托消息传递系统负责发送数据呢?这是因为,数据封装为原子消息,传送操作可以反复执行,直到这一操作成功,这样接受者就能确信收到正确的数据副本。
1为何使用消息传递?
[1] 消息传递要比文件传输更直接,对数据的封装要比共享数据库更好,传输可靠性要比远程过程调用高。
[2] 远程通信:
[3] 平台/语言的集成: SOA/ESB,通用连接特性就是消息总线模式的核心。
[4] 异步通信:消息传递采用发送并忽略的方式进行通信。发送者不必等待接受者接受和处理消息,甚至不必等待消息传递系统传送消息。 接受者可能要向发送者返回消息的应答或处理结果,这是通过另一个消息完成的,发送者通过回调机制检测次消息是否到来。
[5] 可变的定时机制:异步通信与同步通信相比,发送者可以按照自己的速度把请求批量发送给接受者,接受者也可按照自己的速度处理请求。
[6] 节流:
[7] 可靠的通信:重发机制
[8] 无连接运行:消息传递系统特别适合这些应用进行数据同步--要同步的数据创建后首先排队,等待应用重新连接网络。(网络不通保存在队列中,网络通后,将数据同步出去)
[9] 仲裁.如仲裁者模式(mediator pattern [GoF])所示,消息传递系统在所有能够发送与接收消息的应用中扮演了仲裁者的角色。应用可以使用消息传递系统作为与其他应用或服务进行集成的指南。如果一个应用与其他应用断开了连接,它只需与消息传递系统重新建立连接,而不必与其他所有进行消息传递的应用建立连接。消息传递系统可以为共享资源(如:数据库)提供大量分布式连接。消息传递系统还可以使用冗余资源提供高可用性、负载平衡、失败网络连接的重新路由,并能调整服务的性能和质量。
[10] 线程管理:异步通信意味着,一个应用在等待其他应用完成任务时,除非有必要,自己不必阻塞。调用者可以使用回调函数,通过回调获得应答消息的通知。
2 异步消息传递带来的挑战:
[1] 异步通信模式的挑战
[2] 复杂的编程模式:异步消息传递需要开发人员采用事件驱动的编程模式
[3] 序列问题:
[4] 同步问题: 消息传递系统必须综合采用同步与异步解决方案。
[5] 性能:需要传递大块的数据时,采用ETL(提取、转换和加载)工具要比消息产地更有效。消息产地更适合用于初始数据复制完成后的系统同步。
[6] 有限的平台支持:许多专用的消息传递系统不能适用于所有平台。通过FTP发送文件是唯一可行的集成方案。
[7] 开发商锁定:
3异步思想:
同步调用: 被调用的子过程在其他进程中执行,调用者也会阻塞,直到子过程把控制权(和结果)返回给调用者。
异步调用: 调用者使用"发送并忽略"的方法,因此它能在发送完消息后继续执行。 P23
4分布式应用于集成:
为什么N层体系结构被认为是应用分布,而不是应用集成呢?
首先,它的通信部件是紧耦合的,他们之间相互直接依赖,其中任何一层离开其他层都会失去作用。
其次,层间一般采用同步通信。
再者,n层或基本应用的用户一般只接受快速的系统响应。
与之相反,所集成的应用都是独立的应用,他们能各自运行,还能采用松耦合的方式互相配合。所集成的应用采用异步通信方式。
5商业消息传递系统:
1.操作系统:Microsoft消息排队(Microsoft Message Queuing, MSMQ)服务软件。 Oracle提供了Oracle AQ,作为其数据库平台的组成部分。
2.应用服务器:JMS(Java Messaging Service) IBM WebSphere及BEA WebLogic 都提供了该规范的具体实现。Sun j2ee JDK中提供了JMS的参考实现。AMQP
3.EAI套件:消息传递、业务流程自动化、工作流、信息汇总等。如IBM WebSphere MQ、Microsoft BizTalk\TIBCO\WebMethods\SeeBeyond\Vitria\CrossWolds
4.Web服务工具集:消息传递指定通用标准(如WS-Reliability\WS-ReliableMessaging和ebMS)
第1章 运用模式解决集成问题P34
1.1 集成的需要 P34
首先,创建商业应用很不容易,创建一个独立的、大型的应用来完成一个企业的所有业务处理几乎是不可能的。
其次,把业务功能分散到多个应用中,这为企业提供了很大的灵活性,可以选择"最好"的财会开发包、“最好”的客户端关系管理系统以及“最好”的订单处理系统来满足自己的需要。IT组织通常对哪种“一站式”的企业应用并不感兴趣,通常提供一个“无所不能”的应用也不太可能。
为了支持常见的商业过程和多个应用间的数据共享,必须把这些应用集成起来。应用集成必须在多个企业应用之间提供高效、可靠和安全的数据交换。
1.2 集成面临的挑战 P35
1.3 集成模式有何帮助 P36
1.4 集成世界 P37
常见的六种集成类型:
[1]信息门户
[2]数据复制
[3]共享的业务功能
[4]面向服务的体系结构
[5]分布式的业务过程
[6]企业到企业(B2B)的集成
1.5 松耦合(loose coupling) P39
1.6 EAI简介 P40
1.7 一个松耦合的集成解决方案 P43 ====================
1.8 Widgets & Gadgets'R Us 公司: 示例
1.8.1 内部系统 P45
1.8.2 接受订单 P45
1.8.3 处理订单 P47
1.8.4 检查状态(检查库存、检查客户的信用等级、检查订单有效性...) P51
1.8.5 修改地址 P54
1.8.6 更新目录 P56
1.8.7 发布公告 P57
1.8.8 测试和监控 P57
1.9 小结P59
基本模式、通道模式、消息模式、路由模式、转换模式、端点模式和系统管理模式等
第2章 集成方式 P60
2.1 引言 P60
2.1.1 应用集成的标准P60 (主要的决策标准):
[1] 应用耦合--应该尽量减少所集成应用之间的依赖性,使每个应用的变化不会对其他应用造成影响。
[2] 干扰性--当把某个应用集成到企业中时,开发人员会尽可能减少对应用的修改,同时尽量减少集成代码的数量。
[3] 技术选择--不同的集成技术需要不同的专门软件和硬件,数量也不同。
[4] 数据格式--所集成的应用必须协商好所交换数据的格式。
[5] 数据的时间特性--当某个应用决定共享一些数据,同时其他应用拥有这些数据时,集成需尽可能缩短共享的时间。
[6] 数据或功能--许多集成解决方案不但允许应用共享数据,还能共享功能,因为共享功能可以在应用之间提供更好的抽象。
[7] 远程通信--计算机处理一般是同步的,也就是说,进程会等待子进程执行完毕后再执行。希望用异步方式调用子进程,高效
[8] 可靠性--与本地函数调用相比,远程连接不仅慢,而且更不可靠。
2.1.2 应用集成的选择P61
[1] 文件传输--让每个应用生成共享数据文件,供其他应用使用,并使用其他应用生成的共享数据文件。(FTP)
[2] 共享数据库--让应用把要共享的数据存储在一个公共数据库中
[3] 远程过程调用--让每个应用公开提供自己的一些过程,使他们能够被远程调用,应用通过调用这些过程来执行操作并交换数据。
[4] 消息传递--让每个应用连接到一个公共的消息传递系统上,并通过消息来交换数据和调用行为。
2.2 文件传输 P62
使用文件的关键在于确定文件的格式。
与文件相关的另一个问题是何时生产与消费文件。
传输数据的频率低、传输数据的量大
缺乏时间特性(timelines)
2.3 共享数据库 P64
NoSQL(Not only SQL)数据库
共享数据库面临的最大困难之一是,要为共享数据库提出一个合适的设计。
2.4 远程过程调用 P66
RPC/ SOAP和XML HTTP协议
2.5 消息传递 P68
第3章 消息传递系统 P71
3.1 引言 P71
3.1.1 消息传递的基本概念 P71
[1] 通道--消息产地应用通过消息通道来传送数据,通道是一个虚拟管道,将一个发送者连接到一个接受者。
[2] 消息--消息是能通过通道传送的一个原子数据包。因此,为了传送数据,应用必须把数据分解为一个或多个数据包,把每个数据包包装为消息,然后通过通道发送消息。同样地,接受者的应用在接受到消息后,必须从中取出数据并进行处理。消息系统将会不断尝试发送消息(从发送者传送给接受者),直到发送成功。
[3] 管道和过滤器--管道和过滤器体系结构描述了如何使用通道将多个处理环节链接起来。
[4] 路由--路由器会决定如何在通道拓扑结构中“导航”,把消息发送给最终的接收者,或者至少把消息发送给下一个路由器。
[5] 转换--各种应用可能对相同的概念数据采用了不同的数据格式;发送者采用一种消息格式,但接收者却希望采用另一种消息格式。为了调解这一矛盾,消息必须经过一个中间过滤器,即消息转换器,由它把消息从一种格式转换为另一种格式。
[6] 断点--大多数应用没有提供与消息传递系统交互的内置功能。与此不同,他们必须包含一层代码,这些代码不仅知道应用如何工作,还了解消息传递系统如何工作,从而能够在应用和消息传递系统之间架桥,使它们能协同工作。这种桥接代码就是一组协同的消息端点,支持应用发送和接受消息。
3.1.2 本书的组织P72
3.2 消息通道 P72
通过消息通道进行通信的应用称作什么?
发送者(sender)和接收者(receiver)
生产者(producer)和消费者(consumer)
发布者(publisher)和订购者(subscriber)
请求者(requester)和提供者(provider)
发送或接收消息的应用可以被称为消息传递系统的客户(client),更专用的术语是端点(endpoint)或消息端点(message endpoint).
有两种不同类型的消息通道:点对点通道和发布-订购通道。
选择性消费者(Selective Consumer)使一个物理通道扮演多个逻辑通道。对于使用消息的应用,如果有一个对应非法消息的特殊通道,及非法消息通道(Invalid Message Channel),往往很有帮助。
3.3 消息P76
消息由两个基本部分组成:
1 消息首部--由消息传递系统使用的信息,用于描述所传送的信息、其信源和信宿(目标)等等。
2 消息体--被传送的数据,一般被消息传递系统忽略,只是原封不动地传送。
如果应用发送的信息在一个消息中容纳不下,可以把它划分为更小的单元,将各个部分作为一个消息序列(Message Sequence)发送。
如果数据只是在一定的时间期限内有用,可以指定这样一个消息到期时间(Message Expiration).
由于消息的各种接受者和发送者必须对消息中的数据格式达成一致,可以把数据格式指定为规范数据类型(Canonical Data Model).
3.4 管道和过滤器 P79
3.4.1 流水线处理P82
3.4.2 并行处理 P82
3.4.3 管道和过滤器的历史 P83
过滤器(filter):消息过滤器(Message Filter)和内容过滤器(Content Filter)
3.5 消息路由器P85
不同的消息路由器 P88
基于内容的路由器(Content-Based Rounter)
基于上下文路由器(Context-Based Rounter):实现负载均衡、测试或失败恢复等功能。
消息路由器:有无状态和有状态的
动态路由器(Dynamic Router)根据各个潜在接收者的控制信息动态配置其路由标准.
3.6 消息转换器 P90
3.6.1 转换的层次P91
3.6.2 解耦合的层次P93
3.6.3 连接的转换 P93
3.7 消息端点 P98
使用消息端点(Message Endpoint)把应用于消息传递通道连接起来,它是消息传递系统的客户,应用可以使用它发送或接收消息。
第4章 消息传递通道 P100
第10章 消息传递端点 P113
10.1 引言
10.1.1 发送和接收模式P113
10.1.2 消息消费者模式P114
节流(throttling):应用控制其消息消费速度的能力,即过量的客户请求可能使服务器超负荷。
应用不一定按照消息传递系统发送消息的速度来接受和处理消息,它可以按照自己的实际能力进行处理,让消息通道把待处理的消息按照先来先服务的方式进行排队。
(1)同步或异步的消费者--开发人员可选择使用轮询消费者(Polling Consumer)或事件驱动的消费者(Event-Driven Consumer).
采用轮询方式能提供最佳的节流控制,因为如果服务器忙,它将无法响应更多的消息,多余的消息将排队。
对事件驱动的消费者来说,只要消息一到达就会处理,因此很容易使服务器超负荷;不过,由于每个消费者一次只能处理一个消息,所以只要限制消费者的数量就能有效地控制消费的速度。
(2)消息分配与消息抓取 P114 -- 这两种模式涉及一组消费者如何处理一组消息。
(3)接受所有的消息或过滤消息--默认情况下,通过消息通道发送的任何消息都能到达监听该通道并消费消息的消息端点。识别能力的消费者可以使用选择性消费者(Selective Consumer)模式来描述它想接受哪种类型的消息。然后消息产地系统只会把与接收者所需类型匹配的消息发送给接收者。
(4)断开连接时仍能订购 -- 对发布-订阅通道来说,如果在它未与网络连接期间有消息发布,是否会错过这些消息呢?在默认情况下,订购者只有在保持连接时才能订购到所需的消息。
为了防止应用错过在两次连接之间发布的消息,需要把它实现为持久订购者。
(5)幂等性 -- 有时相同的消息会传输多次,这是因为消息传递系统不知道消息是否已经成功传送,或者是因为消息通道为了提高性能而降低了服务质量造成的。而对消息的接收者来说,它们一般认为每个消息只传输一次,如果重复处理相同的消息,很容易出现问题。
把接收者设计为幂等接收者(Idempotent Receiver)就能妥善地处理重复的消息,并防止它们造成接收者应用出错。
(6)同步或异步的服务 -- 应用应该提供同步的服务调用(通过远程过程调用)还是异步的服务调用(通过消息传递),对此也很难做出选择。
不同的客户端可能会采用不同的调用方法,不同的环境也可能要求采用不同的方法。很多情况下,我们不能只使用其中一种方法,而要同时采用两种调用方法。
服务激励器把消息通道连接到应用中的同步服务,从而只要接收到消息,就调用相应的服务。同步的客户端可以直接调用服务,而异步的客户端必须通过发送消息的方式调用服务。
10.1.3 消息端点主题P115
BEA的WebLogic和IBM的WebShpere提供的MDB框架是如何实现的?
基本说来,容器实现了消息分派器,这个分派器有大小动态可变的缓冲池,其中放置着可重用的执行者,每个执行者基于自己的会话和事务来消费消息。
10.2 消息传递网关P115
应用 --> 消息传递网关 --> 消息传递系统
消息传递网关把消息发送给其他组件,并等待应答消息(见"请求/应答"部分)。这样的消息传递网关可以采用两种不同的方法实现:
1. 阻塞(同步)方式的消息传递网关:阻塞方式的消息传递网关发送一个消息后,要等待应答消息返回,才能把控制交还给应用。
2. 事件驱动(异步)的消息传递网关:事件驱动的消息传递网关则吧消息传递层的异步特性暴露给应用。当应用向消息传递网关发送与业务领域相关的请求时,会为应答提供一个业务领域相关的回调函数。控制立即返回给应用。当应答消息到达时,消息传递网关处理消息,然后调用回调函数。根据编程语言或平台的不同,回调可以通过函数指针、对象引用或委托实现。注意:这个异步函数调用接口具有事件驱动特性,但它不依赖于任何特定的消息传递技术。
ACT(Asynchronous Completion Token,异步完成令牌)
10.2.1 链接网关P119
10.2.2 处理消息传递异常P120
10.2.3 生成网关P120
10.2.4 使用网关用于测试P120
10.3 消息传递映射器P123
10.3.1 减少编码的工作量 P126
10.3.2 映射器与转换器 P126
10.4 事务性客户端P127
10.5 轮询消费者 P135
10.6 时间驱动的消费者P137
10.7 竞争消费者 P141
10.8 消息分配器 P145
10.9 选择性消费者 P151
10.10 持久订购者 P156
10.11 幂等接收者P160
10.12 服务激励器P163
第11章 系统管理 166
第0章 引言
0.1系统集成的四种方法:
(1) 文件传输--一个应用写文件,之后另一个应用读这个文件。为此,应用之间需要协商文件名、文件的位置、文件的格式、文件读写的时间以及谁负责删除这个文件。例如:平台Agent读写平台日志文件。读写Excel文件
(2) 共享数据库--共享数据库--多个应用共享相同的数据库,这个数据库位于独立的位置数据库中。由于不存在重复保存的数据资料,因此不必将数据从一个应用传送给另一个应用。凉山州公安系统与全球眼系统对接。福建网管与第三方故障系统对接共享中间库。CRM对接模式。
(3) 远程过程调用--一个应用开放其部分功能,使得其他应用能够远程访问这些过程。他们之间的通信是实时、同步的。例如:RPC\WebService调用\CRM对接方式。
(4) 消息传递--一个应用向公共消息通道中发布一个消息,其他应用可以在之后某个时间从通道中获得这个消息。应用之间必须写上协商建立通道以及消息的格式。这种通信是异步的。如:Email\IM下线后再上线可以收到之前没有查看的消息。
0.2什么是消息传递?
消息传递是一种能支持高速、异步、程序到程序间可靠通信的技术。程序之间通过发送数据包进行通信,这种数据包即成为消息(message).
通道(channel),也成为队列,是连接程序并传递消息的逻辑路径。通道的行为类似于消息集合或消息数组,但是它能在多台计算机之间神奇地共享,同时被多个应用使用。
发送消息的应用被称为发送者(sender)或生产者(producer),它把消息写到通道中。
从通道中读取(和删除)消息的应用成为接受者(receiver)或消费者(consummer).
消息是由两部分组成:消息首部和消息体。
消息首部包含消息的元信息--谁发送的消息、其目标是哪里等等,这一消息为消息传递系统所使用,使用消息的应用大多会忽略这些信息。
消息体包含实际传送的应用数据,这些信息通畅会被消息传递系统忽略。
0.3什么是消息传递系统?
消息传递能力是由一种单独的称为消息传递系统或面向消息中间件(Message-Oriented Middleware,MOM)的软件系统提供的。
为什么不直接 把数据发送给接收者,而是让应用把数据作为消息封装并存储在消息传递系统中,然后委托消息传递系统负责发送数据呢?这是因为,数据封装为原子消息,传送操作可以反复执行,直到这一操作成功,这样接受者就能确信收到正确的数据副本。
1为何使用消息传递?
[1] 消息传递要比文件传输更直接,对数据的封装要比共享数据库更好,传输可靠性要比远程过程调用高。
[2] 远程通信:
[3] 平台/语言的集成: SOA/ESB,通用连接特性就是消息总线模式的核心。
[4] 异步通信:消息传递采用发送并忽略的方式进行通信。发送者不必等待接受者接受和处理消息,甚至不必等待消息传递系统传送消息。 接受者可能要向发送者返回消息的应答或处理结果,这是通过另一个消息完成的,发送者通过回调机制检测次消息是否到来。
[5] 可变的定时机制:异步通信与同步通信相比,发送者可以按照自己的速度把请求批量发送给接受者,接受者也可按照自己的速度处理请求。
[6] 节流:
[7] 可靠的通信:重发机制
[8] 无连接运行:消息传递系统特别适合这些应用进行数据同步--要同步的数据创建后首先排队,等待应用重新连接网络。(网络不通保存在队列中,网络通后,将数据同步出去)
[9] 仲裁.如仲裁者模式(mediator pattern [GoF])所示,消息传递系统在所有能够发送与接收消息的应用中扮演了仲裁者的角色。应用可以使用消息传递系统作为与其他应用或服务进行集成的指南。如果一个应用与其他应用断开了连接,它只需与消息传递系统重新建立连接,而不必与其他所有进行消息传递的应用建立连接。消息传递系统可以为共享资源(如:数据库)提供大量分布式连接。消息传递系统还可以使用冗余资源提供高可用性、负载平衡、失败网络连接的重新路由,并能调整服务的性能和质量。
[10] 线程管理:异步通信意味着,一个应用在等待其他应用完成任务时,除非有必要,自己不必阻塞。调用者可以使用回调函数,通过回调获得应答消息的通知。
2 异步消息传递带来的挑战:
[1] 异步通信模式的挑战
[2] 复杂的编程模式:异步消息传递需要开发人员采用事件驱动的编程模式
[3] 序列问题:
[4] 同步问题: 消息传递系统必须综合采用同步与异步解决方案。
[5] 性能:需要传递大块的数据时,采用ETL(提取、转换和加载)工具要比消息产地更有效。消息产地更适合用于初始数据复制完成后的系统同步。
[6] 有限的平台支持:许多专用的消息传递系统不能适用于所有平台。通过FTP发送文件是唯一可行的集成方案。
[7] 开发商锁定:
3异步思想:
同步调用: 被调用的子过程在其他进程中执行,调用者也会阻塞,直到子过程把控制权(和结果)返回给调用者。
异步调用: 调用者使用"发送并忽略"的方法,因此它能在发送完消息后继续执行。 P23
4分布式应用于集成:
为什么N层体系结构被认为是应用分布,而不是应用集成呢?
首先,它的通信部件是紧耦合的,他们之间相互直接依赖,其中任何一层离开其他层都会失去作用。
其次,层间一般采用同步通信。
再者,n层或基本应用的用户一般只接受快速的系统响应。
与之相反,所集成的应用都是独立的应用,他们能各自运行,还能采用松耦合的方式互相配合。所集成的应用采用异步通信方式。
5商业消息传递系统:
1.操作系统:Microsoft消息排队(Microsoft Message Queuing, MSMQ)服务软件。 Oracle提供了Oracle AQ,作为其数据库平台的组成部分。
2.应用服务器:JMS(Java Messaging Service) IBM WebSphere及BEA WebLogic 都提供了该规范的具体实现。Sun j2ee JDK中提供了JMS的参考实现。AMQP
3.EAI套件:消息传递、业务流程自动化、工作流、信息汇总等。如IBM WebSphere MQ、Microsoft BizTalk\TIBCO\WebMethods\SeeBeyond\Vitria\CrossWolds
4.Web服务工具集:消息传递指定通用标准(如WS-Reliability\WS-ReliableMessaging和ebMS)
第1章 运用模式解决集成问题P34
1.1 集成的需要 P34
首先,创建商业应用很不容易,创建一个独立的、大型的应用来完成一个企业的所有业务处理几乎是不可能的。
其次,把业务功能分散到多个应用中,这为企业提供了很大的灵活性,可以选择"最好"的财会开发包、“最好”的客户端关系管理系统以及“最好”的订单处理系统来满足自己的需要。IT组织通常对哪种“一站式”的企业应用并不感兴趣,通常提供一个“无所不能”的应用也不太可能。
为了支持常见的商业过程和多个应用间的数据共享,必须把这些应用集成起来。应用集成必须在多个企业应用之间提供高效、可靠和安全的数据交换。
1.2 集成面临的挑战 P35
1.3 集成模式有何帮助 P36
1.4 集成世界 P37
常见的六种集成类型:
[1]信息门户
[2]数据复制
[3]共享的业务功能
[4]面向服务的体系结构
[5]分布式的业务过程
[6]企业到企业(B2B)的集成
1.5 松耦合(loose coupling) P39
1.6 EAI简介 P40
1.7 一个松耦合的集成解决方案 P43 ====================
1.8 Widgets & Gadgets'R Us 公司: 示例
1.8.1 内部系统 P45
1.8.2 接受订单 P45
1.8.3 处理订单 P47
1.8.4 检查状态(检查库存、检查客户的信用等级、检查订单有效性...) P51
1.8.5 修改地址 P54
1.8.6 更新目录 P56
1.8.7 发布公告 P57
1.8.8 测试和监控 P57
1.9 小结P59
基本模式、通道模式、消息模式、路由模式、转换模式、端点模式和系统管理模式等
第2章 集成方式 P60
2.1 引言 P60
2.1.1 应用集成的标准P60 (主要的决策标准):
[1] 应用耦合--应该尽量减少所集成应用之间的依赖性,使每个应用的变化不会对其他应用造成影响。
[2] 干扰性--当把某个应用集成到企业中时,开发人员会尽可能减少对应用的修改,同时尽量减少集成代码的数量。
[3] 技术选择--不同的集成技术需要不同的专门软件和硬件,数量也不同。
[4] 数据格式--所集成的应用必须协商好所交换数据的格式。
[5] 数据的时间特性--当某个应用决定共享一些数据,同时其他应用拥有这些数据时,集成需尽可能缩短共享的时间。
[6] 数据或功能--许多集成解决方案不但允许应用共享数据,还能共享功能,因为共享功能可以在应用之间提供更好的抽象。
[7] 远程通信--计算机处理一般是同步的,也就是说,进程会等待子进程执行完毕后再执行。希望用异步方式调用子进程,高效
[8] 可靠性--与本地函数调用相比,远程连接不仅慢,而且更不可靠。
2.1.2 应用集成的选择P61
[1] 文件传输--让每个应用生成共享数据文件,供其他应用使用,并使用其他应用生成的共享数据文件。(FTP)
[2] 共享数据库--让应用把要共享的数据存储在一个公共数据库中
[3] 远程过程调用--让每个应用公开提供自己的一些过程,使他们能够被远程调用,应用通过调用这些过程来执行操作并交换数据。
[4] 消息传递--让每个应用连接到一个公共的消息传递系统上,并通过消息来交换数据和调用行为。
2.2 文件传输 P62
使用文件的关键在于确定文件的格式。
与文件相关的另一个问题是何时生产与消费文件。
传输数据的频率低、传输数据的量大
缺乏时间特性(timelines)
2.3 共享数据库 P64
NoSQL(Not only SQL)数据库
共享数据库面临的最大困难之一是,要为共享数据库提出一个合适的设计。
2.4 远程过程调用 P66
RPC/ SOAP和XML HTTP协议
2.5 消息传递 P68
第3章 消息传递系统 P71
3.1 引言 P71
3.1.1 消息传递的基本概念 P71
[1] 通道--消息产地应用通过消息通道来传送数据,通道是一个虚拟管道,将一个发送者连接到一个接受者。
[2] 消息--消息是能通过通道传送的一个原子数据包。因此,为了传送数据,应用必须把数据分解为一个或多个数据包,把每个数据包包装为消息,然后通过通道发送消息。同样地,接受者的应用在接受到消息后,必须从中取出数据并进行处理。消息系统将会不断尝试发送消息(从发送者传送给接受者),直到发送成功。
[3] 管道和过滤器--管道和过滤器体系结构描述了如何使用通道将多个处理环节链接起来。
[4] 路由--路由器会决定如何在通道拓扑结构中“导航”,把消息发送给最终的接收者,或者至少把消息发送给下一个路由器。
[5] 转换--各种应用可能对相同的概念数据采用了不同的数据格式;发送者采用一种消息格式,但接收者却希望采用另一种消息格式。为了调解这一矛盾,消息必须经过一个中间过滤器,即消息转换器,由它把消息从一种格式转换为另一种格式。
[6] 断点--大多数应用没有提供与消息传递系统交互的内置功能。与此不同,他们必须包含一层代码,这些代码不仅知道应用如何工作,还了解消息传递系统如何工作,从而能够在应用和消息传递系统之间架桥,使它们能协同工作。这种桥接代码就是一组协同的消息端点,支持应用发送和接受消息。
3.1.2 本书的组织P72
3.2 消息通道 P72
通过消息通道进行通信的应用称作什么?
发送者(sender)和接收者(receiver)
生产者(producer)和消费者(consumer)
发布者(publisher)和订购者(subscriber)
请求者(requester)和提供者(provider)
发送或接收消息的应用可以被称为消息传递系统的客户(client),更专用的术语是端点(endpoint)或消息端点(message endpoint).
有两种不同类型的消息通道:点对点通道和发布-订购通道。
选择性消费者(Selective Consumer)使一个物理通道扮演多个逻辑通道。对于使用消息的应用,如果有一个对应非法消息的特殊通道,及非法消息通道(Invalid Message Channel),往往很有帮助。
3.3 消息P76
消息由两个基本部分组成:
1 消息首部--由消息传递系统使用的信息,用于描述所传送的信息、其信源和信宿(目标)等等。
2 消息体--被传送的数据,一般被消息传递系统忽略,只是原封不动地传送。
如果应用发送的信息在一个消息中容纳不下,可以把它划分为更小的单元,将各个部分作为一个消息序列(Message Sequence)发送。
如果数据只是在一定的时间期限内有用,可以指定这样一个消息到期时间(Message Expiration).
由于消息的各种接受者和发送者必须对消息中的数据格式达成一致,可以把数据格式指定为规范数据类型(Canonical Data Model).
3.4 管道和过滤器 P79
3.4.1 流水线处理P82
3.4.2 并行处理 P82
3.4.3 管道和过滤器的历史 P83
过滤器(filter):消息过滤器(Message Filter)和内容过滤器(Content Filter)
3.5 消息路由器P85
不同的消息路由器 P88
基于内容的路由器(Content-Based Rounter)
基于上下文路由器(Context-Based Rounter):实现负载均衡、测试或失败恢复等功能。
消息路由器:有无状态和有状态的
动态路由器(Dynamic Router)根据各个潜在接收者的控制信息动态配置其路由标准.
3.6 消息转换器 P90
3.6.1 转换的层次P91
3.6.2 解耦合的层次P93
3.6.3 连接的转换 P93
3.7 消息端点 P98
使用消息端点(Message Endpoint)把应用于消息传递通道连接起来,它是消息传递系统的客户,应用可以使用它发送或接收消息。
第4章 消息传递通道 P100
第10章 消息传递端点 P113
10.1 引言
10.1.1 发送和接收模式P113
10.1.2 消息消费者模式P114
节流(throttling):应用控制其消息消费速度的能力,即过量的客户请求可能使服务器超负荷。
应用不一定按照消息传递系统发送消息的速度来接受和处理消息,它可以按照自己的实际能力进行处理,让消息通道把待处理的消息按照先来先服务的方式进行排队。
(1)同步或异步的消费者--开发人员可选择使用轮询消费者(Polling Consumer)或事件驱动的消费者(Event-Driven Consumer).
采用轮询方式能提供最佳的节流控制,因为如果服务器忙,它将无法响应更多的消息,多余的消息将排队。
对事件驱动的消费者来说,只要消息一到达就会处理,因此很容易使服务器超负荷;不过,由于每个消费者一次只能处理一个消息,所以只要限制消费者的数量就能有效地控制消费的速度。
(2)消息分配与消息抓取 P114 -- 这两种模式涉及一组消费者如何处理一组消息。
(3)接受所有的消息或过滤消息--默认情况下,通过消息通道发送的任何消息都能到达监听该通道并消费消息的消息端点。识别能力的消费者可以使用选择性消费者(Selective Consumer)模式来描述它想接受哪种类型的消息。然后消息产地系统只会把与接收者所需类型匹配的消息发送给接收者。
(4)断开连接时仍能订购 -- 对发布-订阅通道来说,如果在它未与网络连接期间有消息发布,是否会错过这些消息呢?在默认情况下,订购者只有在保持连接时才能订购到所需的消息。
为了防止应用错过在两次连接之间发布的消息,需要把它实现为持久订购者。
(5)幂等性 -- 有时相同的消息会传输多次,这是因为消息传递系统不知道消息是否已经成功传送,或者是因为消息通道为了提高性能而降低了服务质量造成的。而对消息的接收者来说,它们一般认为每个消息只传输一次,如果重复处理相同的消息,很容易出现问题。
把接收者设计为幂等接收者(Idempotent Receiver)就能妥善地处理重复的消息,并防止它们造成接收者应用出错。
(6)同步或异步的服务 -- 应用应该提供同步的服务调用(通过远程过程调用)还是异步的服务调用(通过消息传递),对此也很难做出选择。
不同的客户端可能会采用不同的调用方法,不同的环境也可能要求采用不同的方法。很多情况下,我们不能只使用其中一种方法,而要同时采用两种调用方法。
服务激励器把消息通道连接到应用中的同步服务,从而只要接收到消息,就调用相应的服务。同步的客户端可以直接调用服务,而异步的客户端必须通过发送消息的方式调用服务。
10.1.3 消息端点主题P115
BEA的WebLogic和IBM的WebShpere提供的MDB框架是如何实现的?
基本说来,容器实现了消息分派器,这个分派器有大小动态可变的缓冲池,其中放置着可重用的执行者,每个执行者基于自己的会话和事务来消费消息。
10.2 消息传递网关P115
应用 --> 消息传递网关 --> 消息传递系统
消息传递网关把消息发送给其他组件,并等待应答消息(见"请求/应答"部分)。这样的消息传递网关可以采用两种不同的方法实现:
1. 阻塞(同步)方式的消息传递网关:阻塞方式的消息传递网关发送一个消息后,要等待应答消息返回,才能把控制交还给应用。
2. 事件驱动(异步)的消息传递网关:事件驱动的消息传递网关则吧消息传递层的异步特性暴露给应用。当应用向消息传递网关发送与业务领域相关的请求时,会为应答提供一个业务领域相关的回调函数。控制立即返回给应用。当应答消息到达时,消息传递网关处理消息,然后调用回调函数。根据编程语言或平台的不同,回调可以通过函数指针、对象引用或委托实现。注意:这个异步函数调用接口具有事件驱动特性,但它不依赖于任何特定的消息传递技术。
ACT(Asynchronous Completion Token,异步完成令牌)
10.2.1 链接网关P119
10.2.2 处理消息传递异常P120
10.2.3 生成网关P120
10.2.4 使用网关用于测试P120
10.3 消息传递映射器P123
10.3.1 减少编码的工作量 P126
10.3.2 映射器与转换器 P126
10.4 事务性客户端P127
10.5 轮询消费者 P135
10.6 时间驱动的消费者P137
10.7 竞争消费者 P141
10.8 消息分配器 P145
10.9 选择性消费者 P151
10.10 持久订购者 P156
10.11 幂等接收者P160
10.12 服务激励器P163
第11章 系统管理 166