转摘自:https://www.ibm.com/developerworks/cn/webservices/ws-esb3/
本文是企业服务总线解决方案剖析系列文章中的第三篇。在第一篇文章中,我们对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 以及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,提供了消息的路由、转发、发布/订阅等功能。在Message Broker中我们可以开发消息流,实现基于消息内容的路由,不同格式之间的消息转换等。Message Broker支持文本、二进制以及XML等消息格式,MQ和HTTP传输协议,也支持XML Schema、WSDL和SOAP等Web服务标准。在Message Broker中还可以对数据库进行访问。
WebSphere MQ提供了跨平台的可靠消息传递功能,多种编程接口的支持(如JMS,MQI,AMI)以及多语言的支持。WebSphere MQ为ESB提供了安全、稳定、可靠的传输支持。
下表为以上产品对ESB基本功能的实现影射。
在表中我们可以看到,虽然ESB要求的很多基本功能实际上是产品功能的基本要求,例如多种消息传递形式、多种传输协议等,但是我们仍然可以对这些产品和技术在ESB中的定位有一个大略的认识:
下面我们将以实际的应用样例,对如何应用WBI 5实现ESB进行更为详细的阐述,在样例中我们将会用到上面介绍的产品和技术。
示例应用场景是一个简化了的制造型企业的订单请求处理过程。企业中的订单管理系统接收到外部客户的订单请求后,首先到库存管理系统中检查当前库存能否满足订单的要求,如果不能满足则需要到生产制造系统中去安排生产,最后向用户发出订单确认。如图一,应用场景所示:
在本示例中,由于客户是位于企业外部的用户,所有订单请求和订单确认是通过HTTP Web服务的方式进行的,库存管理系统采用J2EE架构,库存检查可以通过RMI-IIOP进行,生产制造系统为遗留系统,只能接收固定格式的MQ的消息。如图二,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中的各个部分。
订单请求服务和订单确认服务分别是在企业内部和企业外部实现的。在企业环境中出于安全性的考虑,对企业内部应用访问Internet时有所限制的,更不可能直接通过Internet访问到企业内部的应用。所以从实际的企业应用背景上考虑,我们是不能直接访问订单请求服务和订单确认服务的,必须要有一个中间的机制来保证两个Web服务的互访问。IBM在WebSphere Network Deploy版本中提供的Web服务网关是用来实现企业内外部Web服务集成的安全有效的方式,有关Web服务网关的知识请参见参考资料[2]。通常的做法是将Web服务网关部署在DMZ中,并与应用服务器做集群,如图四所示:
除此之外利用Web服务网关的更重要的目的是作为ESB,Web服务网管提供的协议转换,路由等功能:
WBI Message Broker提供的消息格式转换功能是ESB的重要特性之一,另外WBI Message Broker 还提供了对Web服务的支持,关于WBI Message Broker的详细介绍请参见参考资料[3]。本示例中应用WBI Message Broker实现的格式转换中介,将SOAP over MQ的Web服务请求转换为对生产制造系统的特定格式的MQ消息,对上层的服务请求者提供Web服务接口。
我们已经实现了本文的应用场景,并将代码以附件的形式提供给读者,您可以下载代码并进行安装。下面我们将介绍如何对配置部署实例程序。
为了能够运行示例程序,首先需要安装应用到的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架构师提供一定的帮助。