使用JMS和ESB构建强大而可靠的SOA(一)

 
   | |

导读:我们将简单了解一下WebSphere ESB产品及其工具环境。SOA由彼此进行通信的服务使用者和服务提供者组成。它们通常通过企业服务总线进行通信。

关键词:JMS ESB 企业服务总线 SOA 服务

 
正在加载数据...

  引言

  面向服务的体系结构(SOA)永远不能建立在真空中。在任何实际的环境中,都必须考虑现有的IT环境,功能(和数据)的提供并不能简单地通过提供一组新服务来实现。因此,构建SOA的一个关键方面就是将现有应用程序分解为更小的块(即“服务”),这些块通过标准协议进行通信,并具有定义良好的接口。这样做的优势在于,此类环境更为灵活,整个系统的各个部分之间并不存在紧密耦合。

  松散耦合且具有平台独立性的服务的概念通过使用企业服务总线(Enterprise Service Bus,ESB)得到了进一步发展。其中,ESB充当使用不同数据和消息格式、网络协议和编程语言的服务之间的“粘合剂”。ESB充当服务使用者和服务提供者之间的中间层,允许部署中介,以执行各种操作,如向交互应用服务质量或执行所需的数据转换。

  在本系列的文章中, 我们将了解一个ESB充当此类中间层的具体例子。我们将利用IBM WebSphere Enterprise Service Bus(WebSphere ESB)V6.0.1产品来链接服务使用者和服务提供者,同时使用JMS作为消息传递机制。在第一篇文章中,我们将简单了解一下WebSphere ESB产品及其工具环境,即WebSphere Integration Developer V6.0.1。第2部分将描述实际的ESB场景,并说明如何构建服务使用者和服务提供者,而在第3部分,我们将演示如何构建运行于WebSphere ESB中的使用者和提供者之间的中介。您将学习如何部署和运行解决方案,我们将提供进行此操作所需的所有代码构件。

  企业服务总线和Java Message Service

  SOA由彼此进行通信的服务使用者和服务提供者组成。它们通常通过企业服务总线进行通信。每个服务具有服务定义,在其中描述如何从使用者接受消息和如何向其使用 者返回消息(“单向”服务时例外)以及其他一些事项。因此,构建ESB与消息传递有很大关系。一直以来,以稳健、快速而可靠的方式发送和接收消息是IT系统的一项关键要求,ESB的到来并未改变这一点;它恰恰给解决方案带来了额外的要求——例如,支持描述消息格式的标准、服务间的事务交换等等。

  同时,基于Java J2EE平台的系统通常会利用Java Message Service(JMS)API来满足其消息传递需求。简单说来,JMS描述如何将消息从一个应用程序发送到另一个应用程序,对服务的事务质量进行了潜在的利用。

  充分考虑到很多应用程序已经在使用JMS了,而SOA内的服务又需要一种进行消息传递的方式,这样就能很好地理解JMS在ESB上下文中所扮演的角色。每个ESB都必须能够通过JMS从服务使用者接收消息,并将其转发到相应的服务提供者(通过JMS或其他协议,如HTTP),反之亦然。而且,JMS还定义了可发送的若干不同类型的消息。例如,Text消息包含消息的字符串表示形式;Object消息包含序列化的Java对象;Map消息包含键/值对的映射,等等。Web服务通常使用SOAP作为其消息格式,但很多应用程序都使用纯XML。因此,ESB必须支持各种网络和消息协议。图1显示了服务使用者和服务提供者可能支持的一系列协议组合。请注意,ESB充当了这两者间的中间层,允许在不受协议限制的前提下连接任何使用者和提供者。

  图1. SOA中的消息和网络协议示例

                

  如果设置WebSphere ESB,以支持不同的组合,这正是我们将在本系列中讨论的内容。不过,首先让我们看一下该产品本身以及其主要组件。

  WebSphere ESB V6.0.1

  WebSphere ESB产品是IBM SOA Foundation的一部分。尽管其版本号可能会让人觉得此产品已经存在很长时间,但该产品却是在2005年末首次发布,与其他已经存在的WebSphere产品系列成员共享很多组件。例如,它使用基于J2EE的IBM WebSphere Application Server作为其核心运行时。WebSphere Application Server提供了一个JMS实现,该实现由WebSphere ESB进行了重用。它还使用了服务组件体系结构(Service Component Architecture,SCA)作为其基础编程模型,并与WebSphere Process Server共享SCA运行时。

  图2显示了WebSphere ESB及其基本组件的概况。

              

  图2. WebSphere ESB概况

  WebSphere ESB支持通过JMS的基本消息传递,可以通过WebSphere Application Server中的MQLink与WebSphere MQ进行通信。使用SOAP over HTTP和SOAP over JMS的Web服务是插入到ESB中的,支持很多Web服务标准和通过应用服务器提供的UDDI注册表。WebSphere ESB不仅可以从标准J2EE客户端使用,也提供C/C++和.Net的客户端支持。而且,它还通过WebSphere Adapter提供了到各种遗留环境的连接。

  WebSphere ESB和服务组件体系结构

  我们在前面提到WebSphere ESB所使用的编程模型基于SCA。SCA描述了一个完整的服务编程模型,涉及到大量可采用相同的方式描述和访问的组件(即服务)。此类组件可以为BPEL流程、业务规则或传统Java组件等等。WebSphere ESB向SCA模型引入了一个新的组件类型,即中介流组件。从SCA的角度而言,中介流组件与任何其他服务组件没有任何区别,因为中介组件具有以下特征:

  ·存在于模块中(更准确地说,存在于中介模块中,它采用这种方式部署到服务器运行时中)。
  ·具有接口,采用Java或WSDL描述。
  ·通过导出向客户端公开,导出可以有多个不同协议的绑定(我们将在以后对此进行讨论)。
  ·具有对其他服务的依赖关系(通过导入,导入也具有描述协议详细信息的绑定)。

  就某种程度而言,中介流编程模型是独一无二的;它支持访问和操作关于正在处理的服务消息的绑定特定信息(通常为Header类型的信息)。有关SCA及其编程模型的详细信息以及如何通过其构建和部署组件,请参阅Building SOA solutions with the Service Component Architecture系列文章。(在本系列的剩下部分中,我们将假定您已具有SCA的基本知识,因此我们将不会对已在其他地方得到详细阐述的内容进行复述。)

  中介流组件提供了一种服务组件的新实现,即中介流的实现。中介流通常使用可视流编辑器进行构建,用于通过一系列中介原语描述请求和响应消息流。这些原语可以读取和更改消息,或将其路由(“筛选”)到不同的目标位置。虽然您可以构建自己的自定义中介原语,该产品仍然提供了一系列用于以下用途的预定义原语:

  ·XSLT转换
  ·消息日志记录
  ·消息筛选
  ·数据库访问。

  图3显示了一个使用若干中介原语实现响应流的中介流组件实现。

              

  图3. 中介流示例

  顺便说明一下,我们将在第2部分详细讲解创建此类流所需的各个步骤。

  WebSphere ESB和服务消息对象

  我们尚未讨论的是,消息“在总线中”时如何对其进行处理。也就是说,如何对发送到中介流组件的数据进行表示?答案是,每个消息到达中介流组件时,将立即被转换为服务消息对象。与此类似,在离开中介流组件前,会将其重新转换为消息的目标所要求的任何格式。

  服务消息对象是Service Data Object(SDO)规范的扩展,该规范描述了一种以独立于源的方式访问数据的方法。因此,并不会考虑消息是否通过HTTP或JMS或任何其他协议传入,也不会考虑消息是SOAP消息还是纯文本,而会始终将其转换为一种可由实际中介流实现(如中介原语)使用的通用格式。

  因此,SCA提供了用于调用中介流组件的编程模型,而SMO/SDO则表示在此组件中处理的实际消息。这二者实现了紧密的协作。

  SCA导出和导入绑定

  正如前面提到的,SCA组件使用导入和导出与外部世界通信(即,与使用组件的客户端和组件的实现使用的其他服务通信)。对WebSphere ESB及其中介流组件而言,可以将导出视为ESB的入站端口,而将导入视为出站端口。

  例如,假定您有一个现有服务使用者和一个现有服务提供者,二者通过SOAP over HTTP进行通信。现在您希望向此连接中插入WebSphere ESB中介,以便能对通过的每个消息进行记录。通过创建中介流组件,并为其提供与目标服务相同的接口,就可以实现此目标。然后为导入创建Web服务绑定, 以引用目标服务的WSDL(包括端点地址),从而创建指向现有Web服务的导入。也就是说,已将导入“绑定”到该Web服务。类似地,为导出创建Web服务,从而生成新WSDL文件,并构建一个指向中介流组件的端点。最后,部署此组件,并告知服务使用者使用新端点地址。消息现在将定向到WebSphere ESB,通过一系列中介原语,然后转发到实际的目标Web服务。

  还记得我们曾提到每个消息都将成为总线中的一个SMO吗?Web服务绑定是一段将传入SOAP/HTTP请求消息转换为服务消息对象的逻辑,而出站Web服务绑定则提供其反向逻辑;即,它将传出SMO转换回SOAP/HTTP消息。这些都是自动进行的。运行时知道入站消息的格式,因为这个消息是由相应的WSDL定义进行了全面的描述,运行时可以据此进行分析和处理。

  为了保证正确性,自定义绑定仅处理消息的正文部分。Header字段由基础设施自动处理,将在不需任何编程的情况下在JMS消息和SMO之间进行转换。

  不过,如果传入的消息并不遵循SOAP之类的特定消息协议,会发生什么呢?例如,如果有JMS映射消息发送到导出,则不能使用默认绑定,因为不知道此映射的格式。此时自定义绑定就派上用场了。必须以Java类的形式提供从传入消息到SMO的转换,以执行相应的分析逻辑和构建正确的SMO。在出站端(即导入)也应该进行相同的处理。自定义绑定实现知道如何获取SMO并将其转换为正确的格式。

  在本系列的第2部分和第3部分,我们将详细讨论自定义JMS绑定的示例(支持全部五种JMS消息类型的绑定),因此我们会再次讨论自定义绑定的话题,并演示如何将自定义绑定作为中介模块的一部分部署到运行时中。

  WebSphere Integration Developer V6.0.1

  WebSphere ESB的目标之一是简化创建中介并将其插入到企业的消息流中。在某种程度上来说,这个目标是通过利用SCA编程模型实现的,该模型允许使用一个描述和部署机制处理不同类型的服务。SCA规范还描述了用于将这些组件装配为较大的解决方案的方法。而且,我们希望支持以细粒度中介原语为基础构建的中介流组件。WebSphere Integration Developer V6.0.1支持所有这些操作。

  我们在前面提供了使用多个原语的中介流组件实现的图。该工具也支持采用可视方式将中介流组件、导出和导入装配为中介模块,以便部署和安装到运行时中。例如,图4演示了如何使用装配编辑器来构建包含中介流组件的中介模块。

                

  图4. 包含中介流的中介模块

  前面提到的系列文章“Building SOA solutions with the Service Component Architecture”详细讨论了使用此工具的示例场景。我们还将在第3部分逐步说明如何构建中介模块。

  结束语

  在本文中,我们讨论了可以如何使用WebSphere ESB产品构建企业服务总线,该产品支持可用于连接到现有服务和新服务的各种消息和网络协议。其中一个协议就是JMS。

  WebSphere ESB基于新的服务组件体系结构,使用服务数据对象作为其内部消息格式模型。SCA定义了绑定的概念,可利用绑定对客户端提供服务组件,并让其与其他组件进行通信。在采用五种不同的JMS消息类型的情况下,我们需要提供自定义绑定实现,以便支持任何消息格式。

  在本系列的其他两篇文章中,我们将提供一个示例,演示如何利用WebSphere ESB来处理JMS客户端和(基于JMS的)消息驱动Bean交换的消息。您将了解如何开发和部署自定义绑定实现,如何全程使用WebSphere Integration Developer作为工具环境来构建相应的解决方案。


使用JMS和ESB构建强大而可靠的SOA
 使用JMS和ESB构建强大而可靠的SOA(一)
 使用JMS和ESB构建强大而可靠的SOA(二)
 使用JMS和ESB构建强大而可靠的SOA(三)
 基于高性能硬件的低延迟ESB解决方案
 SOA需要ESB吗?
 微软公布新一代金融通讯解决方案,以简化支付处理及与 SWIFTNet 的整合
 美国海岸警卫队用SOA和ESB更好地跟踪海上航船

原文出处:http://space.itpub.net/9665688/viewspace-545179
 
来源:BLOG    
 
 
 
 
 

ESB

 
你有若干协议,希望股给华为一个单一的协议(如FTP、email、XMPP到一个消息系统),如ActiveMQ、ESB可以帮助你解耦来自协议的服务实施。
 
Mule和其他ESB产品在场景中的真正价值是至少几个集成点或者至少三个集成应用。他们很好的适用需求松耦合、可扩展性和鲁棒性的场景。
 
在20世纪90年代中期,许多企业期待企业应用集成就像圣杯一样,可以使IT基础设施中的不同竖井集合在一起。在1999年,产业专家开始探讨企业神经系统……
 
银行业在各种领头应用之间充当着关键角色,起初就是这些银行的应用促进了面向消息的中间件的发展。在不同平台上的各种应用需要可靠地连接起来……
 
企业服务总线(ESB)在众多现代架构的工具箱中已经找到了自己的一席之地,但是它仍旧是一种年轻的技术,安装细节令人生畏……

热门技术手册排行

 

随着开源技术越来越成熟,一个稍有开发经验的人通过学习就可以用开源的产品和技术构建一套可用的系统。对于从事软件开发的人员,尤其是对Java或动态语言相关领域的人来说,“开源”也许是他们最喜爱的单词。但是,很多时候我们需要的不仅仅是一个可用的系统,而是希望这个系统开发更简易、性能更高和扩展性更好等。这确实是一个令人头痛的问题。本指南很多地方都是点到为止,要深入了解相关信息的读者请借助参考资料、网站等自行挖掘。

 

本专题分六部分探讨SOA设计模式,当初设计面向服务架构的一大初衷就是降低服务间耦合度,由此提高服务的灵活性和自由度。

 

业务流程管理(business process management,bpm)不是一个新概念,甚至不是一个新名词。它是从相关的业务流程变革领域,如业务流程改进(bpi)、业务流程重组(bpr)、业务流程革新中发展起来的。流程管理技术也是从早期的工作流管理、eai、流程自动化、流程集成、流程建模、流程优化等技术中发展起来的。

 

TOAGF是一个架构框架,简而言之,TOGAF是一种协助发展,验收,运行,使用,和维护架构的工具。它是基于一个迭代(Iterative)的过程模型,支持最佳实践和一套可重用的现有架构资产。

 

云计算的概念越来越流行,Amazon、Google和IBM是第一批将云计算引入公众视线的公司。云计算就是新的Web2.0,一种既有技术上的市场绽放。

 

Mashup是一个非常cool的新的应用程序种类。如果你想真正的了解它们,我们需要回过头来看看你现在的计算机,其实它就是一个非常好的帮助你理解mashup的模型。现在开源的操作系统无疑是非常好的apis的集合或应用程序编程接口,帮助开发者去构建其应用程序。计算机本身也是一个很好的为用户提供接口的例子,键盘和鼠标可以被理解为你通过计算机的接口而使用的不同的应用程序。本技术手册为读者提供了一些相关信息,如果需要深入了解mashup,读者可以借助其他参考资源。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录