共享社区

首页 » 编程技巧共享 » JAVA编程技巧共享 » 基于服务的企业集成模式轻松入门,第 2 部分: 进一步介绍基本概念的演变
java - 2008-6-12 22:52:00
2008 年  4 月  15 日
本文是系列文章的第 2 部分,将接着介绍第 1 部分中没有讲到的内容。到目前为止,您已经学习了两个最早的集成模式——数据共享(socket编程)和远程过程调用(RPC),下面将继续学习一些基本概念。再学习两个更高级的模式:分布式对象和异步消息传递。了解语言独立性的概念、服务接口声明、服务的发布和发现的基本思想,以及企业服务总线 (ESB) 的基础知识。
            引言
            本系列文章的第 1 部分和第 2 部分主要探索企业集成模式的发展,介绍一些基本概念,并重点介绍基于面向服务的体系结构 (SOA) 的集成模式。第 1 部分介绍了两个早期模式:数据共享(socket 编程)和 RPC,探索了服务提供者和服务使用者、平台独立性和连接性的概念。
            为改进 RPC 的功能,现在我们介绍以下两种方法:
                        让我们首先了解一下分布式对象这一方法,因为它与 RPC 的关系更密切一些。目前,大多数应用服务器都基于 ORB 技术。
            分布式对象:对象请求代理
            分布式对象技术的实现有三个主要类型。其中之一就是语言独立性和平台独立性,即所谓的公共对象请求代理体系结构(Common ObjectRequest Broker Architecture,CORBA)。其他技术则依赖于语言或者依赖于平台和语言。Java 远程方法调用(RMI) 是依赖于语言技术的示例,而 Microsoft 分布式对象组件模型 (DCOM) 和 IBM® 系统对象模型 (SOM)是依赖于平台技术的示例。
            现在我们将详细介绍 CORBA,因为它是最常见(独立于语言和平台)的技术,并且来自不同供应商且基于此技术的产品可以一起使用。例如,基于 ORB 的 IBM WebSphere® Application Server 可以与许多其他供应商的应用服务器通信。
            除引入面向对象的优点(如继承、多态性和封装)外,CORBA 还引入了大量的新功能。最重要的可能要数 ORB 这一概念,ORB 提取了用于封送输入和输出参数的代码和用于从客户端和服务器应用程序到独立软件组件通信的代码。另外,ORB 还提供了用于获取远程对象引用的设备,以便调用该远程对象上的方法。
            此分离允许多个应用程序重用同一代码,并通过从点到点的集成中移去应用程序,使这些应用程序之间能够进行一定程度的分离。从点到点的集成中移去应用程序可能是 ESB 概念发展的第一步。图 1 演示了这一情况,该图显示了同一台计算机上的多个应用程序可以使用同一 ORB相互通信,并可以与不同计算机上的应用程序进行通信。
                           
图 1. 多个应用程序通过 ORB 相互通信,演示代码重用和通过 ESB 的间接通信(ESB 方向的第一步)
                           
            图 2 显示了 ORB 的基本工作原理。当应用程序需要使用另一个组件的服务时,它首先获取提供该服务的对象的引用。获取对象引用后,客户端应用程序可以调用该对象上的方法,该对象就好像是本地对象。
                           
图 2. 远程对象上使用 ORB 的方法调用,包括获取远程对象引用
                           
            CORBA 还引入了接口定义的语言独立性概念。这是通过引入接口定义语言 (IDL)(类似于 C++ 编程中的头文件)完成的。它只定义接口,但不包括实现。IDL 负责确保在不同的语言之间正确地交换数据,从而负责 CORBA的语言独立性。这允许使用一种语言(如 C++)实现客户端,使用另一种语言(如 Java)实现服务器。清单 1 显示了一个 IDL 示例。
           
清单 1. IDL 接口定义示例,它使用单个远程操作为计算数的平方定义单个接口
               
module Test {
interface square
  attribute double arg1;
  double getSquare (in double arg1);
};
};

            CORBA 中提出的另一个重要概念是命名服务,它允许 CORBA 对象注册,并按名称查找这些对象。此概念包含了 SOA 中注册概念所需的种子。
            总的说来,CORBA引入了大量的新功能,并允许重用通信代码,对代码进行封送和解封送处理。远程对象的注册和位置概念、语言独立性接口定义和从点到点集成移除是引入的重要新功能。因此,对于许多集成项目,基于 ORB 的解决方案可能是合适的选择。不过,使用基于 ORB的集成存在一些缺点,因此,在某些情况下,这可能不是最佳选择。其中的一些注意事项包括:
           
异步消息传递
            为处理这些问题,就出现了并行开发,并行开发基于异步消息传递,并包含开发另一个类型的 ESB 所需的种子。此类型的 ESB 提供了比基于 ORB 的 ESB 类型更具扩展性的解决方案。在异步消息传递 中,客户端或客户端对象将消息发送到目标应用程序,但是不等待响应就继续其工作。这将导致在涉及的应用程序之间发生某种程度的分离。因此,如果期望处理大量事务,可以将异步消息传递用作集成的基础。
            在消息传递过程中,应用程序不直接相互通信,它们之间没有建立专用通信链接。相反,它们可以通过队列进行间接通信(如图 3 所示)。应用程序 A将消息发送到队列。应用程序 A 提交消息后,应用程序 B从队列中检索该消息,不过,如果每个接收应用程序都有专用队列,则通信仍属于点到点的通信。在异步消息传递中,存在一个名为发布和订阅 的选项,多个应用程序可以从中接收同一消息。但这常常是不够的,因为一个应用程序需要更复杂的消息路由。例如,可能需要基于消息的内容和大小来路由消息。在这种情况下,除消息传递软件外,中间件还必须包括通常称为消息代理消息路由器。中心消息代理可以从不同的应用程序接收消息,为每种消息类型确定正确的目的地,并将消息路由到适当的目的地应用程序。它允许应用程序相互通信,而无需知道接收应用程序的位置。图 4 显示了这一流程,还指示消息传递以及消息代理可以形成 ESB 的框架。
                           
图 3. 使用队列进行消息传递
                           
                           
图 4. 使用消息传递软件和中心消息代理(路由器)组件的多个应用程序可以相互通信,并可以与通过网络连接的其他计算机上的应用程序进行通信
                           
            同步消息传递的另一个优点是能够保证消息的提交。通过在连接应用程序的网络两端保留该消息可以做到这一点。这可以确保即使在网络临时中断或者接收应用程序与发送应用程序未同时运行时也能提交消息。使用 RPC 或 ORB 则不能够提供此保证。
            而使用消息传递中间件(如 IBM WebSphere MQ)的另一个优点是可以通过网络交换和传输大量的数据,从而进行粗粒度的数据传输。这将能够更高效地使用网络带宽。
            尽管从理论上讲异步消息传递是单向通信,但是可以让它调用接收应用程序中的一些功能。接收应用程序中此类功能调用的一个示例是消息驱动的 bean(MDB)。MDB 和类似的软件部分没有返回值。可以使用异步消息传递模拟使用两个队列的同步消息传递。图 5显示了此内容,其中一个队列(即请求队列)用于提交请求,而通过另一个队列获取返回值。请求队列是请求应用程序(应用程序A)的输出队列;同时它又充当接收应用程序(应用程序 B)的输入队列。类似地,响应队列用作应用程序 B 的输出队列和应用程序 A的返回值的输入队列。
                           
图 5. 使用消息传递软件模拟同步消息传递
                           
            在目前所描述的选项中,当涉及大量事务时,异步消息传递可能是应用程序共享数据和功能的最高效方法。不过,这并不适用于所有情况;必须进行适当的调整,才能得到适合您的情况的解决方案。异步消息传递也存在一些缺点:
           

结束语

本系列文章的第 1 部分和第 2 部分描述了一些最基本的概念,目的是为了便于了解面向服务的集成模式。这些概念包括松散耦合、代码重用和分层、语言和平台独立性、独立于语言的接口、在运行时发现远程对象的思想、远程调用方法以及针对可扩展性的异步消息传递。后续的两篇文章(第 3 部分和第 4 部分)将介绍如何使用这些概念,并进一步发展为面向服务的集成模式。例如,定义和发现的思想可发展为 SOA 注册的概念,而 ORB 和异步消息传递的概念则形成 ESB 模式的核心。

参考资料
学习

获得产品和技术

讨论


关于作者

WaseemRoshen 博士是俄亥俄州哥伦布市 IBM Global Business Services Enterprise Architectureand Technology Center of Excellence 的一位 IT 架构师。他致力于企业体系结构和集成方面的工作。他还是一位Sun 认证的 J2EE 架构师,已经发表了 60 篇文章,并获得了 24 项专利。
1
查看完整版本: 基于服务的企业集成模式轻松入门,第 2 部分: 进一步介绍基本概念的演变