面对变幻莫测的市场需求的变化,企业希望通过推进“服务化”提高敏捷性和响应能力:更方便地与客户和合作伙伴交互,更灵活地设计和构建IT基础架构。为此,SOA(Serice-OrientedArchitecture,面向服务的架构)日益引起企业高层的重视。SOA将分散在企业应用中的功能组合为基于标准的互操作“服务”,与使用传统应用相比,企业可利用SOA,更快地组合和重用“服务”,以满足业务需求。SOA围绕“服务”,而不是“应用”组织企业IT,能帮助企业更快地推出新服务,并灵活响应业务环境的变化。
为了优化IT基础结构,以便交付服务,将SOA变成现实,IT组织需要一个智能化的基础架构,以降低服务重用的复杂性,并可靠地集成IT环境的各种技术、协议和应用。为此,IT组织创建了一个以“服务”为中心的抽象层,以隐藏各种应用和技术带来的底层复杂性,并提供一个定制企业应用的平台。
今天,我们将上述服务或集成层称为ESB(Enterprise Service Bus,企业服务总线)。ESB使“服务端点”本身不必再管理服务之间的交互。ESB允许方便地扩展服务,消除了专门编写的点对点、硬编码实现的脆弱性,以及带来的昂贵代价。
有了ESB,开发人员不必再在各个服务端点构建集成和中介服务,如路由、协议代理、转化、安全策略和SLA(Service Level Agreement,服务级别协议)质量策略,只需在“ESB”中配置这些策略即可。也就是说,开发人员不必重编服务端点的集成和管理策略,通过“ESB配置步骤”就能创建动态服务端点,适应动态变化。
Oracle Service Bus是一个ESB,用于集成服务,管理服务交互,并在不同IT环境之间执行消息代理。它的轻量级、无状态、高性能架构扮演“中间人”角色。OracleService Bus是部署和实现SOA的理想工具,支持智能消息代理,监控和管理服务;它在企业基础架构中添加一个可扩展的动态路由和转换层,并管理服务生命期:配置和供应服务、监控服务的运行和履行SLA。
Oracle Service Bus以“配置”为中心,由策略驱动,实现了“服务使用者”和“服务提供者”之间的松耦合配合。OracleService Bus提供动态配置服务和策略的多功能控制台和环境,能支持多个服务集成项目,能确保所有配置元素的引用完整性,并能在测试或生产期间监控和运行系统。开发人员通过“配置”,而不是“编码”动态更改服务集成关系,以便从几个方面扩展服务架构:安全类型、服务位置、服务可用性、服务响应性、数据格式、监控、传输和通信;与传统的EAI方法相比,ESB需要的时间少得多。
服务总线软件的中心是“共享服务”,而不是“应用程序孤岛”。利用简捷高效的SOA基础结构,IT组织可以在几乎不影响IT基础架构的前提下,快速提供新服务功能,重用极具价值的业务功能,从而实现服务化,实现与业务需求的同步,响应业务流程的更改,并满足客户提出的新需要。
下面将详细分析服务总线的必要性,讨论它如何管理组织的整个服务生命期。
SOA之所以变得经济可行,是因为受到了两种现状的推动:行业利用Web服务“公开”和“使用”新服务及遗留服务,构建了支持“松耦合服务交互”的工具包和基础架构。在采用SOA策略时,由于成本和复杂性等因素,IT专业人员并不愿意完全淘汰现有的基础架构,而是希望将现有应用业务表示为服务,以供其他业务流程和应用重用。
这就是说,SOA的成功离不开“集成层”,集成层支持异构环境下的动态服务交互。集成层必须对服务使用者隐藏服务端点的更改,同时支持现有服务的发展,并能够业务的发展,快速添加新服务以满足客户和合作伙伴的要求。
在构建和维护SOA时,企业架构师面临挑战:如何使架构适应业务需求的增长,并满足新客户的需要?
● 在系统中引入动态行为和运行时配置能力
● 在企业范围内重用服务,管理服务的生命期
● 适应服务使用者和服务提供者间的变化
● 确保企业服务的统一使用
● 确保服务的安全性
● 确保企业服务符合IT策略
● 监控和审计服务使用,并管理系统停运
图2演示很多组织的典型架构和SOA挑战。此时,必须维护服务使用者和服务提供者间的点对点连接,也就是说,使用者启用一个服务端点时,必须复制传输、转换、安全和路由机制。如果服务端点接口发生变化,使用各个服务使用者将与该服务断开,并重新开发和重新部署,最终造成了服务中断。
企业架构师和其他专家想要简化和控制IT基础架构,并促进重用。Oracle Service Bus是他们的理想工具。Oracle Service Bus支持不同服务的动态交互,具有以下特点:“本地服务资源缓存”注册在总线集成的服务,通过UDDI(UniversalDescription Discovery and Integration,统一描述、发现和集成)集成到企业服务注册表,“服务配置环境”支持验证和版本控制;异构服务端点间的协议和消息代理;服务间的动态路由和转换;消息和传输安全。将Oracle Service Bus添加到图2的架构,Oracle Service Bus成为一个分布的服务中间层。它提供上述功能,运用路由规则、转换、安全和访问策略,将这些从服务端点分离出来,并予以维护,如图3所示。
图2 SOA面临的挑战
将OracleService Bus作为服务使用者和服务提供者间的中间层,可消除脆弱的点对点连接,并消除这些连接的专门维护。使用者不必详细了解服务端点的接口和实现,企业可以更灵活地连接不同资源。不同客户端可与各种资源通信,例如,.NET客户端不必了解底层服务端点的实现细节就能使用Java业务服务。
消除点对点连接还意味着,更改服务端点不再影响服务使用者,在服务总线中更改策略配置即可。这将在服务使用者级别减轻或消除重新开发和重新部署产生的影响。
图3 SOA与OracleService Bus
Oracle Service Bus是一个服务中介,在整个服务生命期都扮演着重要的角色:公开服务,并配置、管理和监控服务使用者和服务提供者之间的“请求-响应”消息流。
图4演示服务生命期。在开始阶段,架构师建立服务模型,构建服务;在开发阶段,开发人员创建和公开应用及服务接口。
在创建这些服务接口后,OracleService Bus随着服务的创建注册这些服务,并公开它们,以供其他服务或流程在后期使用。OracleService Bus可能在本地注册表中直接注册服务,也可能从诸如Oracle™ ServiceRegistry的企业服务注册表导入服务。注册后,Oracle Service Bus配置代理接口,以定义服务通信的消息流。消息流包含传输和安全要求,并说明如何将消息路由给服务自身。
在用OracleService Bus注册服务后,由BEA WebLogic Integration™等工具创建的业务流程就可以使用和编排这些服务,以满足各种业务要求。编排过程包括利用服务满足业务要求,将服务运用于细粒度业务流程。最终用户可通过UI(用户界面),如BEAWebLogic PortalTM交易门户, 或Oracle™ UserInteraction协作门户,使用这些业务流程。
图4 服务生命期
Oracle ServiceBus还监控和管理服务端点之间的消息流、系统健康状况以及可用性。业务和运营分析师可能获取这些信息,以分析行为模式,寻找有待改进之处。随着服务的改进和新服务版本的推出,新一轮的生命期重新开始。
OracleService Bus是策略驱动的中介层,它处理消息,确定如何根据要求路由和转换消息。它通过诸如JMS或HTTP的传输协议接收消息,并用相同协议或另一指定的传输协议发送消息。消息响应按相反的方向进行。消息处理由元数据驱动,元数据由OracleService Bus控制台配置的代理服务的消息流定义指定。使用代理方法,企业可实现服务客户端和业务服务之间的松耦合,并维护一个集中的安全控制和监控点,如下图所示。
图5 Oracle Service Bus
使用Oracle Service Bus,服务集成关系通过配置策略和代理服务动态实现。在使用这种方法时,可以快速扩展服务架构的某些系统特性:
● 传输协议和通信范例
● 服务安全性
● 服务位置
● 服务可用性和响应性
● 数据格式
● 日志记录和监控
由于代理服务扮演中间人角色,故Oracle Service Bus能消除以下领域的服务客户端和业务服务需求之间的差别:
• 加载内容和模式
• 封送协议
• 传输协议
• “点对点”和“发布-订阅”协议
• 单向和请求/响应范例
• 同步和异步通信
• 安全性
OracleService Bus在元数据中存储永久策略、代理服务和相关的资源配置;元数据可从开发环境传给部署环境,再传给生产环境,还能根据需要修改。消息代理引擎从元数据缓存访问配置信息。
代理服务是OracleService Bus架构的一个核心概念。服务使用者经由这个接口与托管的后端服务连接。代理服务是“服务总线”在本地实现的中介Web服务的定义。使用Oracle Service Bus控制台,可按照WSDL和使用的传输类型定义接口,配置代理服务;并在消息流定义和配置策略中指定消息处理逻辑。
由于代理服务可将消息路由给多个业务服务,故可以独立于与代理通信的业务服务,配置代理服务的接口。在这种情况下,代理将被配置为消息流定义,它根据路由逻辑,将消息路由给相应的业务服务,然后将消息数据映射为业务服务接口需要的格式。
代理服务的核心是“上下文”,上下文是一组XML变量,由请求流和响应流共享。可将新变量动态地添加到上下文,也可从上下文删除变量。预定义上下文变量包含有关消息、传输头、安全原理的信息,当前代理服务的元数据,以及代理服务调用的主要路由服务和发布服务的元数据。上下文可由Xquery表达式读取和更改,并通过转换和适当更新操作进行更新。
上下文核心包括$header、$body和$attachment变量。这些变量各自包装SOAP(SimpleObject Access Protocol,简单对象访问)头元素、SOAP正文元素和MIME(Multipurpose Internet Mail Extensions,通用Internet邮件扩展)附件。消息均采用SOAP格式,如果不是SOAP格式,就映射为SOAP格式。请浏览BEA文档帮助站点http://e-docs.bea.com/alsb/docs20/concepts/dev_concepts.html的Oracle Service Bus资源配置和概念指南,通过表格详细了解指定消息类型的上下文变量。
代理服务的实现由“消息流”的定义指定,消息流确定经由代理服务的消息流动。在构建消息流时,将用到以下四个元素:
一对管道:一个用于请求,一个用于响应。管道由多个连续阶段组成,“阶段”指定处理请求或响应时执行的操作。
分支节点:根据消息、消息上下文指定的值分岔,或根据调用的操作分岔。
路由节点:用来定义消息目的地。默认的路由节点是一个回显节点,可根据请求返回响应。
启动节点。
可通过多种方法,将以上元素结合成一颗“树”,“启动节点”一定是“根”,而且是惟一的根。路由节点只作为“叶子”。请求消息从启动节点开始,沿路径到达叶子,在请求管道执行操作。如果叶子是路由节点,就生成响应,对于单向服务而言,响应将为空。如果叶子是一个回显节点,则根据请求返回响应。响应沿相反路径,忽略分支节点的操作,但在响应管理执行操作。图6演示一个典型的消息流例子。
图6 一个消息示例
可以灵活使用路由节点:
● 可组合和嵌套if结构、for-each结构和case结构,以定义单个端点和路由消息的操作。
● 在将消息发送给所选端点前,或接收到响应后,可进行一系列影响上下文变量的转换。
● 在调用消息流之前,可透明地执行WS安全策略和授权。
OracleService Bus在BEA WebLogic ServerTM 9.0上运行,并使用BEAWebLogic Server TM 9.0的运行时工具。BEA WebLogicServer TM提供企业级可用性、扩展性和可靠性。可通过两类企业级配置部署OracleService Bus:
● 单个服务器,该服务器也用作管理服务器
● 执行消息处理的托管服务器集群。“域”包含部署OracleService Bus的集群及管理服务器。集群还能运行其他应用。
OracleService Bus允许集中管理和控制多个分布服务端点,可部署为一个管理部门或企业所有Web服务通信的“集线器”。
还可以对底层BEA WebLogicServer实施集群化,以便水平扩展单个Oracle Service Bus,将消息负载均匀分布在集群服务器上,防止出现系统瓶颈。OracleService Bus将元数据和配置自动传给托管服务器,加快了本地检索速度;并自动从这些服务器收集监控信息,将它们集成和显示在“管理控制台”上。
对于分布式部署用例而言,可将多个OracleService Bus迭代连接起来,为分布企业相应创建一个分布网络。
Oracle ServiceBus将ESB的概念、消息代理和运行服务管理融合一个产品中,在服务网络上管理、集成消息及服务。其核心特性分为三类:
. 服务供应:注册和公开服务,以便重用
. 服务集成和路由:与服务间通信有关的路由逻辑
. 服务管理:监视和管理服务的活动性和可用性
“服务供应”在机构、系统和部门内部和之间公开和分配服务。与服务供应相关的特性如下:
. 服务类型
. 内容类型
. 通信类型
. 更改中心
. 开发、测试和生产环境的迁移
. 服务版本控制
Oracle ServiceBus支持各种服务类型,如常见的Web服务(使用WSDL中的XML或SOAP绑定)和非XML(通用)服务。创建业务和代理服务时,服务类型在注册服务时选择。它还定义服务端点通信使用的协议。Oracle Service Bus的服务类型包括:
ü SOAP服务:在创建SOAP消息时,将标题和正文变量的内容打包到<soap:Envelope>元素。如果正文变量包含一个引用XML,就原封不动地发送它,即不将引用内容替换为消息。如果用附件变量定义附件,则从主消息和附件数据创建MIME包。每个附件部分的内容处理类似于消息传输服务的处理方式。
ü XML服务(非SOAP):发送给基于XML服务的消息是XML,也可以是代理服务配置允许的任何类型。在包含附件的消息中,它们的内容是MIME包,其中包含主XML载荷—通常是第一部分或由顶级内容类标题标识。
ü 消息传输服务:消息传输服务指可以接收一类数据并响应不同数据类型的消息。支持的数据类型包括XML、MFL、文本和非强型二进制数据。
上面已经提到,选择的服务类型定义了可用于与服务端点通信的协议。表1显示了服务类型和支持的传输协议,以及未来版本将支持的其他传输协议。
表1 支持的服务类型和传输协议
服务类型 |
传输协议 |
SOAP WSDL或XMLnic |
JMS1 HTTP(S) |
SOAP(非WSDL) |
JMS1 HTTP(S) |
XML(非WSDL)2 |
JMS HTTP(S) 电子邮件 文件 FTP |
消息传输类型(二进制、文本、MFL、XML) |
JMS HTTP(S) 电子邮件 文件 FTP |
1. 如果启用了WS-Security,就不支持JMS请求和JMS响应。
2. HTTP GET仅用于非WSD的XML。
图7是一幅屏幕快照,它显示了如何在Oracle Service Bus中选择服务类型。
图7 服务类型
为支持与异构端点的互操作性,OracleService Bus允许利用“服务配置”,控制使用的内容类型、JMS类型和编码。它不对外部客户或服务的需要进行假设,而是使用为此目的配置的服务定义信息。Oracle Service Bus从服务类型和接口推导出站消息的内容类型。
如果服务类型是:
ü XML或SOAP(有或没有WSDL),内容类型就是文本或XML
ü MFL或二进制消息传输和接口,内容类型就是二进制或八位字节流
ü 文本消息传输和接口,内容类型就是文本或纯文本
ü XML消息传输和接口,内容类型就是文本或XML。
如果代理服务调用服务,出站上下文变量 ($outbound) 中就可以覆盖内容类型。代理服务响应时,入站上下文变量 ($inbound) 也可以覆盖内容类型。还有JMS类型(字节或文本),在“AdministrationConsol”(管理控制台)定义服务时,可配置此类型。在服务定义中还可以为所有出站消息明确配置编码。
为了支持异构环境,OracleService Bus提供了多个消息传输方式。它支持以下几种通信类型:
ü 同步请求和响应
ü 异步一对一发布
ü 异步一对多发布
ü 异步请求和响应(同步与异步桥接)
同步和异步通信是标准传输方式,这里需要对“异步请求/响应”或“同步-异步桥”接作进一步解释。在“同步异步桥接”中,同步客户程序向异步提供者发出请求。为此,OracleService Bus在一个JMS队列上发布消息,配置第二个JMS队列以便响应,并设置一个超时值监听响应。在收到请求后,服务总线在请求队列发布消息,并监听响应队列中的响应。对于服务使用者,这类服务就像同步服务。
使用“异步请求和响应”消息具有以下优势:
ü 请求线程不会阻塞等待响应,消除了执行大量阻塞请求/响应调用时潜在的线程管理问题。
ü 消息传输更可靠。
异步请求和响应的一个用例是:客户端通过HTTP调用代理Web服务,而代理服务调用的后端系统使用JMS请求和响应。
Oracle ServiceBus最重要的一个功能是“Change Center”(更改中心),更改中心是在服务总线进行配置更改的关键。更改中心有独特功能,可在更改时锁定当前配置(见图8)。使服务总线可在控制台执行配置更改时,继续接收和处理服务请求。此外,对配置更改“激活”前,不影响当前配置。完成后,这些更改立即生效,服务总线即可以使用新配置。也就是说,可在不中断服务的情况下随时执行更改。
表2归纳了Oracle ServiceBus更改中心提供的特性。
表2 更改中心的特性
页面 |
相关任务 |
查看配置更改 |
内部会话:查看当前会话所做的配置更改。 外部会话:查看以前会话激活的配置更改。 |
撤销更改 |
内部会话:撤销当前会话所做的配置更改。 外部会话:撤销会话的激活,将过去会话的激活撤销到新会话。 |
查看所有会话 |
内部和外部会话:查看Oracle Service Bus控制台中现有的全部会话。 |
查找和替换 |
内部会话:查找和替换环境值。 外部会话:查找环境变量(替换功能无效)。 |
查看冲突 |
只有内部会话:查看和解决控制台内所有会话的更改之间的所有冲突。
如果当前会话修改的资源已经被另外的会话修改并激活,就发生了冲突。如果两个会话对同一资源进行两次更改,在其中一次会话激活前,不发生冲突。将显示会话中的语义资源错误。 |
任务细节 |
内部会话:查看当前会话进行的具体更改的细节。 外部会话:查看激活会话进行的具体更改的细节。 |
图8更改中心(屏幕左上角)
如果激活的更改引起意外事件,更改中心还能撤销任何会话的所有更改。任务细节提供有关更改资源、更改者和时间信息。由于可撤销整个会话或会话中的个别更改,OracleService Bus能将受影响的配置恢复到先前的状态。
Oracle ServiceBus包含“Project Explorer”(项目管理器),可按逻辑分类Oracle Service Bus的实体,使开发人员和管理员能更好地组织大型开发项目。项目属于非层次、分散和顶级分组结构。所有资源(例如服务、WS策略、WSDL、XQuery转换等)位于一个不重叠项目中。可在项目中直接创建资源,或将资源组织到文件夹中。项目或其他文件夹中可创建文件夹,这类似于文件系统的目录,项目级别是根目录。为了增强导航能力,可为所有项目和文件夹添加描述。图9描述了项目管理器。
项目管理器的另一个功能是跟踪文件夹内资源引用的外部资源。查看这些引用可以了解所引用资源的位置(<项目名>/<文件夹名>/<资源名>格式)和类型。
图9 项目管理器
Oracle Service Bus能简化从一个环境到另一环境(从开发到测试、再到生产)迁移配置。“导出”功能可将现有配置导入jar文件,然后利用“导入”功能将文件导入其他环境。
要导入已导出的资源,必须在导入前建立一个会话。一旦定义了要导入的jar文件,项目管理器就会显示要导入的资源及引用列表(参加图10)。用户随后可从jar文件导入所有或部分资源。
在导入资源后,在通过更改中心激活后,资源方可生效。多数情况下,端点服务的“统一资源标识”(URI)会随环境而变化,必须在导入后更改。更改中心的“查找和替换”功能允许用户搜索和替换URI中的文本;这只适用于最近导入的资源。
图10 导入
如前所述,与服务端点通信有关的所有路由逻辑都通过“配置代理”处理,使服务使用者不必考虑与后端服务通信有关的复杂性。
由于可从服务使用者和提供者中删除路由、转换、安全性和传输细节,并将它们置于可配置的代理服务器中,故服务集成更灵活。如前所述,管道、分支和路由节点定义了代理服务的实施。OracleService Bus控制台用来配置代理服务消息流定义中操纵消息的逻辑。这些逻辑包括转换、发布和报告等活动,它们作为管道的单独操作实施。
下面详细描述设计和实施代理服务消息流时使用的功能:
ü 管道和阶段
ü 转换
ü 消息验证
ü 消息操纵
ü 运行分支
ü 动态路由
ü 服务调用
ü 错误处理
ü 安全性
管道是命名的阶段序列,代表没有分支的单向处理路径。它用于确定进入的请求消息流。管道分以下三类:
. 请求:用于处理消息流的请求路径
. 响应:用于处理消息流的响应路径
. 错误:用于错误句柄。
为了建立请求和响应路径,请求和响应管道成对出现,并且组成一个根目录的树形结构。分支节点允许这些管道对有条件地执行,而分支端点的路由节点执行请求和响应发送。图11显示了一个管道树的例子。
管道树将表3中描述的顶级组件的实例串联起来。
表3 管道分类
管道类型 |
描述 |
管道对节点 |
管道对节点将一个请求和一个响应管道连接成一个顶级元素。处理请求时只执行请求管道,而反向处理响应时只执行响应管道。 |
分支节点 |
分支节点使处理完全沿着多个可能的路径中的一条继续进行。分支由查找表驱动,每个分支用惟一字符串值标记。消息上下文中的变量被指定为该节点的查找变量,其值决定了走哪条分支。 |
路由节点 |
路由节点用于执行与其他服务的请求和响应通信。它们代表代理服务的请求和响应处理之间的界线。当路由节点发送请求消息时,就认为完成了请求处理。当路由节点收到响应消息时,响应处理开始。 |
回显节点 |
回显节点(或回显)将消息从请求管道的一端发送到响应管道的起点。该消息不从代理服务发到另外的服务,而是保留在代理服务中。 |
图11 管道树
每条管道都是一系列阶段,阶段是活动容器。这些活动决定了消息通过Oracle Service Bus传送时产生的影响(参见图12)。带一组上下文变量(包含消息内容)的消息被送入管道,并可在管道阶段中用活动访问或修改消息。
表4描述了管道阶段中所有可能的活动。
表4 管道阶段中可能的活动
活动 |
影响 |
转换 |
转换活动通过转换格式或操纵消息本身内的数据,更改消息上下文。 |
分支 |
分支活动允许使用嵌套的 “if” 语句结构,根据消息上下文内的元素值执行不同活动集合。 |
发布 |
发布活动向一个或多个端点发送消息的副本。发布活动采用异步方式,不接收响应。 |
报告 |
报告活动从消息上下文捕捉信息(例如业务级数据),以便填充控制台内的报告。 |
跳转 |
跳转活动终止阶段内的处理。它们用于在发生某些情况时,向错误句柄抛出错误或跳转到管道下一阶段。 |
日志 |
日志活动能将选定上下文记入BEA WebLogic Server的系统日志,从而达到调试的目的。 |
图12 管道阶段和活动。
由于消息流一般使用基于WSDL的服务,所以必须频繁执行运行和专门处理。Oracle Service Bus不需要根据运行手工配置分支节点,提供自动分支的零配置分支节点。如果没有为服务端点配置运行分支,OracleService Bus会根据消息上下文中指定的运行自动分岔到适当的运行中。
转换用于源服务与目的地服务间存在不同的数据类型,以及需要数据映射以便转换数据的情况。OracleService Bus支持使用XQuery的数据映射以及“可扩展样式表语言转换”(XSLT) 标准。XSLT图描绘了XML与XML的映射,而XQuery图可以描绘“XML与XML”、“XML与非XML”和“非XML与XML”的映射。这些转换可由开发人员创建并导入Oracle Service Bus,也可以利用控制台本身的XQuery编写转换的脚本。还有两种转换消息上下文的方法。第一种使用XQuery或XSLT重新格式化消息,这种方法最常用。第二种操纵消息的内容,以便添加、删除或只替换某些元素。
根据代理服务的消息流配置,转换可以发生在不同的位置。图13显示了转换发生在动态路由情况的例子。在消息发送到目的地服务前,使用导入的XQuery转换消息,而相反的转换运用于服务响应。
图13 转换
消息操纵是另一种转换,它通过操纵消息的内容(而不是整个结构),使消息与目的地服务兼容。“活动(Action)”可用于消息流的请求或响应管道中的消息。表5中描述了通过内容操纵可用于转换消息的不同活动。
在图14中,首先操纵消息的内容以删除其中的数据元素,然后将消息发送到目的地端点。当收到响应时再加回该元素,以便与发出请求的客户兼容。
表5 通过内容操纵可转换消息的活动
活动 |
描述 |
插入 |
将数据元素插入消息。这个插入可以按配置时的指定,发生在消息上下文的任何位置。 |
删除 |
删除消息中的数据元素。它用于目标目的地不需要消息中特定数据元素的情况。 |
替换 |
用不同的系列替换消息中的一系列文本。例如,这可用于替换消息的名称空间。 |
图14 消息操纵
Oracle Service Bus能通过“验证活动”,对照WSDL或XML schema验证进出的消息。这个活动可以发生在消息流内的任何时间,并能保进出的消息符合目的地服务使用者或提供者期望的格式(参加图15的例子)。验证失败的消息可记录该失败,还可以产生错误,此时错误阶段可使用替代活动。
消息验证可用于服务版本控制,以针对不同版本的schema或WSDL验证消息。这是为了确保消息被发送到服务端点的正确版本,或在发送消息前检查是否必须应用转换。
图15 消息验证
在请求的某些元素可能造成多目的地服务的情况下,OracleService Bus能根据消息内容执行动态路由。当“业务需求”控制请求的某些条件,定义处理请求的位置时,动态路由就有用。例如,金融机构申请有关客户的信用报告可能根据客户或机构的住所,使用多项信用服务。
动态路由通过条件转移语句(或服务调用)分析消息,从而检索某个数据元素或多个数据元素的数值。不同的业务服务目的地被赋予这个条件检查的不同数值组合,允许将消息动态发送到多项业务服务。根据业务服务需求,转换可用于一个或多个此类目的地。图16提供了一个基于内容的动态路由的例子。
Oracle Service Bus能创建通用代理服务,可接收任何SOAP或XML消息。这些通用服务类型可以提供基于内容的动态路由。代理服务经过配置可分析它接收的SOAP或XML消息,然后决定将消息发到哪里。此类路由的一个优势是“动态协议切换”。例如,如果存在多个端点,但有些采用HTTP而其他使用JMS协议,就在运行时决定采用哪个协议。这隐藏了服务使用者面临的协议细节的复杂性。事实上,服务使用者可以向OracleService Bus发送一条HTTP请求,而不必了解该消息通过JMS还是其他协议最终发送到服务端点。
图16 基于内容的动态路由
Oracle Service Bus提供服务调用(servicecallout)活动,为更复杂的消息流带来更大的灵活性。这个活动通常用于复杂的动态路由情况,此时很难决定将消息发送到何处,或要执行消息扩展。在路由阶段使用服务调用活动时,可请求OracleService Bus内注册的另一个服务在消息上执行某种活动。该服务将向消息流返回响应,并将该响应赋值为本地变量。然后就可以在当前的消息流中使用改变量。
Oracle ServiceBus提供强大的错误处理功能,能为配置服务灵活垢处理错误。它可以多种方法处理错误,例如:
ü 测试断言是否真实,并在请求或响应管道中发送失败响应。
ü 配置服务以便在多级捕捉和处理错误,包括阶段、路由节点、管道或服务级别。捕捉错误的配置级别可根据期望的服务行为而定。
ü 允许默认系统错误句柄处理错误。
通常,更简便的方法是在消息流的最低级别处理特定错误,使用较高级别的错误句柄默认处理尚未处理的错误。最好显式处理管道中预期错误,并允许系统错误句柄处理意外错误。但是,与WS-Security相关的错误必须在服务级别处理。
如果发生错误,每个阶段都可能有一系列步骤,以便为该阶段建立错误管道。预定义的上下文变量$fault保存了错误的相关信息,在错误管道中可访问该数据。出错时调用存在的最低范围的错误管道(意味着为处理错误而配置的最低级别)。这条错误管道使用户可按下列方法处理错误:
ü 向备用端点发布原始消息
ü 生成错误响应消息,返回代理服务的调用者
ü 用日志活动记录消息,或使用报告活动生成错误情况的报告
ü 修改上下文后继续通过管道处理消息
ü 引发异常,将控制转到下一级更高范围的错误管道
Oracle Service Bus控制台用于跟踪消息,以便获得消息流的精确描述,提高错误的可视性;例如,可查看报告原始消息,显示它被提交处理,然后可查看后来报告的错误,显示没有正确处理该消息。这样会同时提供消息流和错误流的全面视图。
Oracle ServiceBus将成熟的BEA WebLogicServer 9.0的WebLogic Security Framework用作更高级安全服务的构件,包括身份验证、身份断言、授权、角色映射、审计和凭证映射。同样,在控制台用于配置安全性前,要配置BEA WebLogic Server的安全性。
控制台具有预定义规则,允许方便地在多个不同运行级别使用BEA WebLogic Server的安全性提供者,如表6所示。
表6 安全性规则
安全级别 |
描述 |
用户管理 |
控制台允许根据相关安全策略,添加用于任务级授权的用户、组和角色。 |
控制台安全性 |
提供对控制台功能的可管理访问,限制用户在其中查看和内容和执行的操作。 |
传输级安全性 |
Oracle Service Bus支持传输级的保密性、消息完整性和客户身份验证,可通过HTTPS进行单向请求或请求与响应的交易,确保连接的安全性。这些可配置为使用基本的身份验证、客户证书确认的身份验证或无客户身份验证。
电子邮件和FTP通过使用安全凭证连接到FTP或电子邮件服务器,从而提供服务。 |
消息级安全性 |
消息级安全性指定客户机应用与Web 服务间的SOAP消息是否应采用数字签名、加密或同时使用两种加密方式。 它还用于指定用户名令牌身份验证、SAML 1.1身份传播和X.509证书身份验证。Oracle Service Bus使用WS-Security作为消息级安全性定义的框架。
消息级安全性使用“Web服务策略”(WS-Policy) 指定的安全策略语句进行配置。WS-Policy是基于XML的可扩展框架,可用特定域的断言扩展Web服务的配置,并指定Web服务的要求、期望和功能。 |
除了提供服务路由和转换这样的ESB功能外,OracleService Bus还包含服务监视和管理功能,可确保按照IT部门的期望成功地运行。下面将详细描述Oracle Service Bus的服务管理和监视功能。
Oracle ServiceBus可监视和收集系统运行和业务审计目的的运行信息。通过可定制的“Dashboard(管理板)”查看Oracle Service Bus收集的运行统计信息。Oracle Service Bus管理板能监视系统的运行状况并标记消息传输服务中的问题,在发生问题时允许快速隔离和诊断问题。
管理板使用户能立即以图形方式查看所有服务器和所监视服务的状态。图17中显示的管理板显示了两个彩色饼图,其中一个显示了Oracle Service Bus域中每个服务器当前的状态。用户可以显示整个域的状态或域内个别服务器的状态。另一个饼图提供服务信息,显示了所有已定义提示和启用监视功能的服务所发生的提示数和相应的严重性。
图17 管理板
除管理板外,OracleService Bus还能深入挖掘每个服务级别,从而分析运行和性能统计信息(参见图18)。这些信息可以是域或指定服务器中个别服务的统计信息。OracleService Bus还提供运行级服务的性能统计信息,可以进行更细致的分析。
Oracle Service Bus能为业务和代理服务设置服务级别协议 (SLA)。这些SLA定义了业务和代理服务所期望服务的精确级别和质量。用户可以根据SLA的指标配置触发提示的规则。一个提示可以配置多级严重性,包括正常、提示、轻微、重大、危险和严重。每个业务或代理服务可以组合多个提示情况,而每个提示可以基于下列参数(参见图19):
. 成功率,失败率
. 消息数
. 错误数
. 故障切换/重试次数
. 验证错误数
. WSS错误数
. 响应时间,最小响应时间,最大响应时间
用户可设置SLA提示,向运行团队通知与业务和代理服务的状况,或与提供的服务质量有关的问题。触发提示时,Oracle Service Bus会向配置的电子邮件地址发送电子邮件通知。通常这些电子邮件发送给运行或管理人员,但Oracle Service Bus还可在提示触发时将消息发送到JMS队列。
图18 服务统计信息
Oracle Service Bus可在消息通过代理服务时,提供有关消息数据的报告。这通过报告活动完成,该活动可以置于请求/响应管道或错误管道阶段内的任何位置。然后就可以通过报告提供者访问报告活动捕捉的数据。表7只列出了报告可应用的一些情况。
表7 报告情况举例
情况 |
描述 |
消息跟踪 |
报告活动可用于在消息通过代理服务器时,过滤消息信息。报告活动可以帮助确定消息转换前后、路由过程等活动是否存在问题。 |
客户支持 |
可以报告进出消息中的业务级数据,以便今后用于客户支持情况或业务级报告。 |
审计 |
报告活动可以从代理服务的消息中提取特定数据,以便今后的审计。 |
图19 SLA提示规则
Oracle Service Bus包含报告提供者;控制台的报告模块显示报告生成器的信息,包括简要信息,并能深入挖掘更详细的专用消息。图20显示了内置报告生成器生成的报告示例。客户也可使用自己的报告生成器,Oracle Service Bus为他们提供Java应用编程接口 (API)。
利用Oracle Service Bus的监视、SLA提示和报告功能,IT业务部门可实时管理其ESB基础设施的状况和可用性,评测是否符合SLA,并高效地为管理团队和企业高管提供报告。
图20 OracleService Bus的报告提供者