本文是企业服务总线解决方案剖析系列文章中的第三篇。在第一篇文章中,我们对ESB的基础知识进行了详细的介绍,在第
二 篇文章中,我们着重对IBM最新的应用服务器WebSphere 6中对ESB的支持进行实例化的介绍,本文将着重介绍如何应用IBM的WBI
5系列实现ESB,并通过具体的例子让读者更深入的了解IBM WBI系列产品中对ESB的支持,从而更快,更方便的利用WBI
5提供的基础设施向SOA架构进行迁移。
本文是企业服务总线解决方案剖析系列文章中的第三篇。在第一篇文章中,我们对ESB的基础知识进行了详细的介绍,在第二篇文章中,我们着重对IBM最新的应用服务器WebSphere
6中对ESB的支持进行实例化的介绍,本文将着重介绍如何应用IBM的WBI 5系列实现ESB,并通过具体的例子让读者更深入的了解IBM
WBI系列产品中对ESB的支持,从而更快,更方便的利用WBI 5提供的基础设施向SOA架构进行迁移。
IBM的WBI 5由WBI Server Fundation,WBI Message Broker,WebSphere
MQ,WBI Connect,WBI Adapters,WBI InterChange Server,WBI
Monitor等等一系列产品组成。这些产品构成了IBM SOA的基础架构,提供了ESB的基本功能,如服务路由、消息转换、中介、传输协议、消息传递模式、服务集成方式等,以及ESB的非功能属性的支持,如安全性、事物、性能、可靠性、服务的监控和管理等。通过使用这些产品可以支持您在复杂的企业IT环境中构建稳定、安全、可靠的ESB,为整个企业基础设施向SOA架构迁移提供支持。
在本文中我们不会对所有这些产品进行详细的介绍,仅会对在本文应用场景中使用到的产品进行一些说明,如果您想进一步了解相关产品请的介绍请访问IBM
developerWorks 网站 WebSphere 专区或者直接与IBM联系。在本文应用场景中我们应用到WBI
5中的以下产品:
WBI Server
Foundation
WBI Server Foundation 以及WebSphere Application Server,WebSphere
Application Server本身是一个稳定的J2EE应用服务器,此外还提供了Web服务标准的支持包括JAX-RPC,Web,Web
services for J2EE以及WS-Security,同时支持SOAP over MQ作为Web服务的传输通道。WBI
Server Foundation 在WAS基础之上,还提供了WebSphere Process Choreographer来支持基于Web服务的业务流程执行语言(Business
Process Execution Language,BPEL);WSIF(WebService Invocation
Framework),一组简单的Web服务调用API,可以支持高效的调用Web服务以及Web服务的多种绑定方法(
更多信息,请参见参考资料);Web 服务网关(WebServices GateWay),是WebSphere
ND版本中的功能,可以用来整合企业内外部的Web服务。
WBI Message
Broker
WBI Message Broker,提供了消息的路由、转发、发布/订阅等功能。在Message Broker中我们可以开发消息流,实现基于消息内容的路由,不同格式之间的消息转换等。Message
Broker支持文本、二进制以及XML等消息格式,MQ和HTTP传输协议,也支持XML Schema、WSDL和SOAP等Web服务标准。在Message
Broker中还可以对数据库进行访问。
WebSphere
MQ
WebSphere MQ提供了跨平台的可靠消息传递功能,多种编程接口的支持(如JMS,MQI,AMI)以及多语言的支持。WebSphere
MQ为ESB提供了安全、稳定、可靠的传输支持。
下表为以上产品对ESB基本功能的实现影射。
在表中我们可以看到,虽然ESB要求的很多基本功能实际上是产品功能的基本要求,例如多种消息传递形式、多种传输协议等,但是我们仍然可以对这些产品和技术在ESB中的定位有一个大略的认识:
- WBI Message Broker,Web 服务网关实现服务中介。WBI Message Broker实现基于内容的服务中介,包括服务路由、协议转换、消息格式的转换等。Web
服务网关实现企业内外服务位置的透明性,服务的定位、路由、协议转换、内容转换等。
- WSIF支持多种服务集成方式,使得将以各种方式实现的组件发布为服务变得更为简单,使得服务的调用更加灵活。
- WebSphere MQ提供可靠的传输通道。
下面我们将以实际的应用样例,对如何应用WBI 5实现ESB进行更为详细的阐述,在样例中我们将会用到上面介绍的产品和技术。
示例应用场景是一个简化了的制造型企业的订单请求处理过程。企业中的订单管理系统接收到外部客户的订单请求后,首先到库存管理系统中检查当前库存能否满足订单的要求,如果不能满足则需要到生产制造系统中去安排生产,最后向用户发出订单确认。如图一,应用场景所示:
图一,应用场景
在本示例中,由于客户是位于企业外部的用户,所有订单请求和订单确认是通过HTTP Web服务的方式进行的,库存管理系统采用J2EE架构,库存检查可以通过RMI-IIOP进行,生产制造系统为遗留系统,只能接收固定格式的MQ的消息。如图二,IT背景所示:
图二,IT背景
下面我们将以此场景为例,说明如何使用WBI 5实现ESB,并在此之上实现订单请求处理。
通过对应用场景进行分析,我们可以看到在示例场景中与将要实现的订单管理系统有关系的应用包括:企业外部的客户应用系统,企业内部的库存管理系统,以及企业内部的生产制造系统。涉及到了多种的集成技术,包括RMI-IIOP,MQ,HTTP等。这仅仅是一个简化的示例场景,真正的企业中会有更为复杂的情况。下面将介绍通过ESB如何将这些系统集成起来。
我们先看一下在集成中应该解决的重要问题:订单管理以Web服务的方式通过HTTP与客户的应用系统进行集成,与客户应用系统交互的内容包括订单请求和订单确认;企业和客户之间有一套标准的订单请求和订单确认Web服务接口,订单管理系统实现订单请求接口,客户方应用系统则需要实现订单确认Web服务接口;实现集成需要让企业内外部互相访问Web服务,安全是其中需要考虑的一个重要问题;另外,因为会有多个需要与订单管理系统集成的客户,因此集成中另一个需要解决的重要问题是如何将订单确认路由到正确的客户应用系统上。库存管理系统企业内部采用J2EE架构的系统,提供了一个EJB
Facade可以进行产品库存的查询,因为在企业内部库存查询时被经常使用的,在这里需要考虑集成的效率问题,我们既希望能够通过RMI-IIOP进行库存查询提高效率,又希望能够这种查询服务不要特定的平台绑定(如J2EE,.NET)。生产制造系统是遗留系统,只能通过MQ进行访问,而且已经定义了请求消息的格式,我们希望能够通过更一般的方法进行访问。
为了解决上述问题,首先要有一个标准的方法来描述接口,WSDL是通常采用的方式。我们通过WSDL来描述订单请求、订单确认、查询库存、安排生产等服务。在此基础之上我们利用WBI构建ESB,实现服务中介,协议无关,位置透明等。为了使读者有个整体的把握,我们先来看看整体的架构图:
图三 ESB架构图
在上面的架构中,我们使用:
- Web服务网关将企业内部的订单请求服务公布到企业外部,企业外部的订单确认服务引入到企业内部,并在Web服务网关中开发路由中介,确保订单确认能够路由到正确的外部服务上;
- 使用WBI Message Broker集成生产制造系统,将基于MQ消息的访问方式转换基于Web服务的访问方式,并实现格式转换中介将SOAP消息转换为特定格式的消息;
- 使用WSDL描述库存查询服务,WSIF提供的EJB绑定可以使用WSDL描述EJB的接口。
下面我们将详细讲解应用场景ESB中的各个部分。
订单请求服务和订单确认服务分别是在企业内部和企业外部实现的。在企业环境中出于安全性的考虑,对企业内部应用访问Internet时有所限制的,更不可能直接通过Internet访问到企业内部的应用。所以从实际的企业应用背景上考虑,我们是不能直接访问订单请求服务和订单确认服务的,必须要有一个中间的机制来保证两个Web服务的互访问。IBM在WebSphere
Network Deploy版本中提供的Web服务网关是用来实现企业内外部Web服务集成的安全有效的方式,有关Web服务网关的知识请参见参考资料[2]。通常的做法是将Web服务网关部署在DMZ中,并与应用服务器做集群,如图四所示:
图四 Web服务网关的常用网络部署
除此之外利用Web服务网关的更重要的目的是作为ESB,Web服务网管提供的协议转换,路由等功能:
- 对外公布订单请求Web服务
公布订单请求服务比较简单,订单请求服务开发完成后,仅仅通过配置Web服务网关即可完成服务的对外公布。Web服务网关需要两个WSDL文件来描述订单请求Web服务:内部的WSDL是对实际订单Web服务的描述,外部WSDL是由Web服务网关导出的;在企业外部使用外部WSDL访问服务,Web服务网关会将之转换成对内部服务的访问。在本应用场景中内外部WSDL是有不同的绑定的,内部WSDL采用的是基于WSIF的EJB绑定,对外则采用SOAP/HTTP绑定,Web服务网管完成不同绑定协议之间的转换。
- 引入外部的订单确认Web服务
引入外部订单确认Web服务需要考虑将订单确认路由到正确的Web服务上的问题。在样例程序中我们实现了服务路由中介,服务路由中介为Web服务网关的JAX-RPC
Handler。在中介里会依据路由表和请求的内容确定目标服务的端点地址。具体来说,以客户标识和客户Web服务的端点地址作为路由表的内容,在JAX-RPC
Handler从SOAP消息中解析出客户的标识,因此为依据查找目标Web服务端点地址,然后将服务端点修改为目标服务的端点地址。
WBI Message Broker提供的消息格式转换功能是ESB的重要特性之一,另外WBI Message
Broker 还提供了对Web服务的支持,关于WBI Message Broker的详细介绍请参见参考资料[3]。本示例中应用WBI
Message Broker实现的格式转换中介,将SOAP over MQ的Web服务请求转换为对生产制造系统的特定格式的MQ消息,对上层的服务请求者提供Web服务接口。
- 实现格式转换服务中介
首先需要定义源和目标消息的格式,源消息是标准的SOAP消息并且有WSDL的服务接口定义,目标MQ消息是纯文本的平板文件,这里我们使用WBI
Message Broker的MessageSet来定义目标MQ消息的格式。消息格式定义完毕后,需要开发消息流来完成格式的转换,在消息流中首先读取MQ对列中的SOAP请求,然后再计算节点中进行消息格式的转换,计算节点利用ESQL遍历源SOAP消息并把它映射到目标消息的特定字段,然后将转换后的消息输出到目标MQ对列上。
我们已经实现了本文的应用场景,并将代码以附件的形式提供给读者,您可以下载代码并进行安装。下面我们将介绍如何对配置部署实例程序。
环境搭建
为了能够运行示例程序,首先需要安装应用到的IBM产品,您需要安装的产品包括:
接下来就是安装和配置Web service gateway,配置应用中用到的MQ队列管理器以及Message
Broker域。关于如何安装和配置Web service gateway, 请参考附录[4],在附件的帮助文件中我们也提供了具体的安装配置步骤。
应用部署
本文应用是基于WSADIE 5.1.1和Message Broker Tookit开发的,附件中除了提供最终的部署文件外,也提供了示例源代码Workspace,您可以通过wsappdevie.exe
-data <Sample_Workspace_Path>命令打开Workspace。下面是部署步骤:
1,首先是部署OrderSyS.ear文件。这个文件的安装可以通过WebSphere管理控制台Websphere
admin console->Applicatioins->Install new application来安装,安装过程全部采用默认设置。安装完成后在浏览其中输入http://localhost:9080/OrderSys/services/OrderSys?wsdl来验证,如果安装成功,将会显示出相应的wsdl文件。
2,在Web 服务网关中创建Channel并安装JAX-RPC Handler。如果Web 服务网关安装成功,我们可以通过http://localhost:9080/wsgw/admin/index.html访问Web
服务网关管理控制台。通过管理控制台为清单请求服务和订单确认服务分别创建两个Channel,并部署JAX-RPC
Handler。
3,部署Message Broker消息流。使用Message Broker Tookit向测试执行组上部署消息流bar包,部署完成后可以通过mqsilist命令查看是否部署成功。关于应用部署的详细步骤,您可以参见附件中的帮助文档。
本文基于一个示例场景讲述了应用 WBI 5系列产品构建 Enterprise Service Bus
的基本方法,使用到的产品和技术,并提供了示例场景实现。是作者在多个 SOA 实际项目经验的总结和提炼,希望能够对有意在企业架构中应用
SOA并实现 ESB 的IT架构师提供一定的帮助。
- 下载本文样例源代码、脚本和帮助文档。
- 在“企业服务总线解决方案剖析”系列
第 1 部分: 企业服务总线的基本概念中,我们对企业服务总线的基本概念进行了详细的介绍。
- 在“企业服务总线解决方案剖析”系列
第 2 部分: 利用 WebSphere 6 中的 SIBus 实现 ESB中,我们着重对IBM最新的应用服务器WebSphere
6中对ESB的支持进行实例化的介绍。
-
Web service invocation sans SOAP
-
使用 IBM WebSphere Web Services Gateway,第 1 部分:改变消息目标及处理头标记
-
WebSphere 信息中心
-
http://publib.boulder.ibm.com/infocenter/wasinfo/
v5r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/twsg_install_nd.html
http://publib.boulder.ibm.com/infocenter/wasinfo
/v5r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/twsg_install_as.html
|