假如这个世界上只剩下你一个人,当你正坐在屋子里的时候,这时突然响起了敲门声...

利用WebSphere SIBus灵活实现ESB路由模式

上一篇 / 下一篇  2008-02-28 12:59:11

概述

WebSphere V6中增加了一个新的特性:服务集成总线(Service Integration Bus,SIBus),基于服务集成总线可以灵活实现ESB(Enterprise Service Bus),为SOA搭建良好的基础架构。SIBus基于成熟的企业应用平台WebSphere Application Server,充分利用WebSphere上灵活的消息机制,可以适应各种用户需求,甚至对于同一个服务集成需求,也会有多种不同的实现方式。

本文针对ESB的路由模式(Routing Pattern),阐述SIBus上各种不同的实现方式及相互间的比较。ITPUB个人空间%jZ7ICn;B
ITPUB个人空间 rwL{i0yh{;b

ESB路由模式

ITPUB个人空间%|.fOgd?g*k'o
图 1:ESB 路由模式ITPUB个人空间9xh;oJ#jngc

c0cd WU2f0ITPUB个人空间S5Nem(`&S g.f
路由模式是ESB的一种基本模式,将服务申请者(Service Requester)的请求按照一定的路由规则(Routing Rules)发送到相应的服务提供者(Service Provider)。ESB路由模式的应用范围很广,比如,每个库房存放不同种类的货物,并且每个库房有自己的库存管理系统(服务提供者),对于一个库存 数量查询请求,需要按照待查询货物的类型路由到相应库房的库存管理系统查询库存数量。ITPUB个人空间)wU_4j"Z}-tl _
ITPUB个人空间 r3xObG9Il0|

在SIBus上实现 ESB 路由模式

SIBus上可以有多种方式实现ESB路由模式,接下来我们将按照是否需要服务整合以及实现路由选择的位置不同,分成四种实现方式来依次阐述。

所 谓服务整合,就是将多个服务提供者整合成为一个新的服务提供者,多个WSDL文件整合成为一个,整合后服务提供者的端口类型(Port Type)是整合前各服务提供者端口类型的并集。对于提供类似服务的多个服务提供者,将它们整合成为单一的服务提供者,可以有效减少服务提供者的数量,不 过,整合的过程通常不能做到自动化,需要大量的手工配置。ITPUB个人空间"H;_qq(\j)Q
ITPUB个人空间8m3Q+gO(p*mE+X:s

经过服务整合,在服务目标(Service Destination)实现路由选择

ITPUB个人空间Ybe;eiz
图 2:服务整合后,在服务目标实现路由选择
d,['C"}b"X2}[0
D H5jx4s| Q/b:M-Q0
ITPUB个人空间~QE#B8_X

一般来说,采用ESB路由模式集成的服务提供者具备类似的功能,只是接口形式不同。比如,各个库存管理系统都支持查询库存数量的服务,其中有些库房管理系统支持Web Service格式的查询接口,有些只支持基于RMI-IIOP协议的接口。

对于服务申请者而言,只关心一个抽象的服务,并不关心支撑这个抽象服务的具体的服务提供者。比如,查询库存数量的用户,只关心是否能够查询到准确的库存数量,不关心这个数量具体是从哪个库存管理系统中查询出来的。

因 此,可以将多个服务提供者整合到SIBus的一个出站服务(Outbound Service)之中,其中的服务目标(Service Destination)对应抽象服务,而每个端口目标(Port Destination)对应一个服务提供者。SIBus中的入站服务(Inbound Service)和出站服务(Outbound Service)以服务目标(Service Destination)作为联系枢纽,服务申请首先到达服务目标,从服务目标再经端口目标到达最终的服务提供者。

这种实现方式的概念清 晰,结构简单,只需要一个服务目标。不过,还需要为出站服务手工整合各个服务提供者的WSDL文件,存在一定的实施难度;而且,在整合出站服务WSDL文 件时,如果各个服务提供者WSDL文件存在Operation重名现象,就会造成整合后的WSDL文件中出现函数重载,在实际生产环境中,函数重载是要尽 量避免的。

未经服务整合,在队列目标(Queue Destination)实现路由选择

ITPUB个人空间p'k6A7lzvn&m
图 3:未经服务整合,在队列目标实现路由选择ITPUB个人空间O'q*R:P t_-Qk

|8O S2K%k0
ITPUB个人空间mM9I"_&c.{*k&V

在相应的SIBus上,创建一个新的队列目标(Queue Destination),在该队列目标上接收入站服务(Inbound Service)的服务申请。同时,为多个服务提供者各自创建出站服务(Outbound Service),每个出站服务包含一个服务目标(Service Destination)和一个端口目标(Port Destination)。

入站服务和出站服务的目标(Destination)之间,可以互通消息。在队列目标上实现路由选择,直接将消息转发给相应的端口目标,不再经过服务目标。

采 取这种实现方式无需手工整合各个服务提供者的WSDL文件,配置相对比较简单,只是增加了SIBus上需要管理的出站服务和服务目标的数量。不过,另一方 面,由于SIBus只能允许通过JAX-RPC直接访问服务目标,不允许直接访问队列目标和端口目标,因此,这种实现方式下,服务申请者不能直接快速的访 问SIBus,只能通过入站服务访问SIBus,从某种意义上降低了性能。

未经服务整合,在服务目标(Service Destination)实现路由选择

ITPUB个人空间)rW~ kSAx Y:G
图 4:未经服务整合,在服务目标实现路由选择
:TE J/W s;k0
+@k9fq+K` M5v0
ITPUB个人空间'p#M"b1?!C!s

这种实现方式与第二种方式比较类似,只是无需创建队列目标(Queue Destination),消息直接到达其中一个出站服务(Outbound Service)的服务目标(Service Destination),在其上实现路由选择,决定消息路由到该出站服务的端口目标(Port Destination)还是到其它出站服务的端口目标上。

这种方式从多个出站服务的服务目标中选择一个作为路由选择点;如果多个出站服务 之间的关系是对等的,那么这种实现方式概念上不如第二种方式清晰,如果多个出站服务的关系不是对等的,则可以其中最常用的出站服务为主,其它出站服务为 辅,以主出站服务的服务目标作为路由选择点,对外抽象服务的接口格式也尽量接近主出站服务,概念比较清晰。

另外,由于可以通过服务目标直接访问SIBus,相对于第二种实现方式,这种方式可以通过JAX-RPC直接访问SIBus上的服务目标,获取对SIBus的访问,性能较高。ITPUB个人空间 L?U;I}"Z
ITPUB个人空间 n2d(oVY!@

未经服务整合,在端口目标(Port Destination)实现路由选择


(h5{#~;WDN;h?'\oc;dm)V0图 5:未经服务整合,在端口目标实现路由选择ITPUB个人空间B\:V4LC

H&zL8T;n)n)|y0

MQj1GZ-Fis}Qd0

这是最直接的一种实现方式,无需创建队列目标(Queue Destination),绕过了服务目标(Service Destination),消息直接到达端口目标(Port Destination),在端口目标上实现路由选择。

这种实现方式在SIBus内部的最短路径只需要经过一个目标(Detination),通信的开销较少。

作为与最终服务提供者的接口,端口目标一般承担协议格式和消息内容转换的工作,很少作为路由选择点;这种实现方式的概念不够清晰。不过,对于性能要求非常苛刻的场合,也不失为一种可能的选择。


KBxaW asZZ0

各种路由选择实现方式的比较ITPUB个人空间WxiI{?

ITPUB个人空间_,M[7Th

ITPUB个人空间6X9o$L)V:`Y%~L


x"p#Ohj0


B!oa;xU0


YCp/`cb\;s0


TAG:

引用 删除 Guest   /   2008-06-24 15:42:41
邮件收发不再单调 !?

你的邮件客户端只能收发吗!?我的新邮件提醒?拍照录像?视频播放?屏幕截图?在线客服?传1G大文传。。都行??是不是真的!? (FM中文快邮-谷哥一下就知)


个人公司

网址:http://web.fm88.cn
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-07-07  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

  • 访问量: 7459
  • 日志数: 97
  • 建立时间: 2008-02-08
  • 更新时间: 2008-07-04

RSS订阅

Open Toolbar