WebSphere Enterprise Service Bus V6.2 的新特性,第 1 部分

概述

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: WebSphere Enterprise Service Bus V6.2 的新特性,第 1 部分

敬请期待该系列的后续内容。

此内容是该系列的一部分:WebSphere Enterprise Service Bus V6.2 的新特性,第 1 部分

敬请期待该系列的后续内容。

简介

通过管理服务之间流动的请求和响应,IBM® WebSphere® Enterprise Service Bus(此后简称为 WebSphere ESB)实现了不同系统的集成。中介模块在 WebSphere Integration Developer 内部编写,并封装将被部署到 WebSphere ESB 运行时的服务交互逻辑。在中介模块内部,根据定义消息流逻辑的一个或多个中介原语,消息可以被补充、转换、记录到日志,并发送给不同服务提供商。消息本身则使用称为 Service Message Object (SMO) 的逻辑结构表示。有关 WebSphere ESB 架构的更多信息,参见本文底部的 参考资料

本文并不打算介绍 WebSphere ESB V6.2 的每一个新特性和功能,也不会深入地研究这些特性。本文将简单介绍 WebSphere ESB V6.2 中的一些新特性,包括对传输绑定的增强、中介原语、中介模式和策略控制。要从本文中获益,您应当具有一定的 WebSphere ESB 经验以及关于其特性和功能的基本技术知识。

新的传输协议支持

在 WebSphere ESB 中,可以通过导入调用现有服务,同时使用导出将中介模块公开给外部应用程序。导入和导出可以与某种与传输有关的协议绑定关联在一起,并且在 V6.2 之前,支持的绑定包括 Web 服务、WebSphere MQ、Java™ Message Service (JMS)、WebSphere MQ JMS、HTTP 或 Service Component Architecture (SCA)。

在 V6.2 中,Web 服务得到了增强,从而能够支持 Java API for XML Web Services (JAX-WS) 和 SOAP 1.2。当在工具中选择 Web Services 导出选项时,将看到如下所示的完整选项列表:

图 1. Web 服务导出选项
Web 服务导出选项
Web 服务导出选项

新的选项包括使用不同协议规范将中介导出到服务请求者的功能。新的绑定支持 SOAP1.2/HTTP 和 SOAP1.1/HTTP,这两项列出在图 1 中的前两行。有关各种规范的更多信息,请参见本文后面的 参考资料

使用 JAX-WS 协议绑定执行导出和导入将使您能够指定策略集来描述交互服务的品质。策略集是指用于 WS-* 标准配置的可重用工件,您需要将其与 JAX-WS 绑定关联。可以针对工具内的导入和导出定义默认的策略集,如下面的图 2 所示,或者是在部署后通过 Integrated Solutions Console 自定义策略集。

图 2. 使用 WebSphere Integration Developer 对导出应用一个默认的策略集
使用 WebSphere Integration Developer 对导出应用一个默认的策略集
使用 WebSphere Integration Developer 对导出应用一个默认的策略集

增强的传输协议支持

在 WebSphere ESB V6.2 以前,绑定为消息实现依赖于传输的数据绑定解析逻辑。如果两个绑定需要使用相同的代码,那么则使用两个特定于传输的数据绑定。WebSphere ESB V6.2 引入了 Data Handlers 来解决这个问题,并且它们使您能够编写单一的代码单元来处理跨不同传输接收的消息。一个例子就是以逗号分隔的可跨多个绑定使用的数据处理程序,例如 HTTP、JMS,并且 MQ. V6.2 包括了大量内置 Data Handlers:

  • Atom 提要格式
  • 分隔格式
  • 固定宽度格式
  • JavaScript Object Notation (JSON) 格式
  • SOAP Data Handler
  • WTX Invoker Data Handler
  • WTX MapSelection Data Handler
  • XML Data Handler

此外,绑定中的错误支持也得到了增强,支持定义一个 Fault Selector 来判断消息是否错误以及错误的名称。如果 Fault Selector 检测到一个错误,当前消息将由 Fault Handler 而不是 Data Handler 处理。与 Data Handler 类似的是,Fault Handler 使您可以创建可跨多个传输使用的消息解析功能。

Failed Event Manager

Failed Event Manager 自 V6.0 以来就包含到 WebSphere Process Server 中,并且 WebSphere ESB V6.2 现在包含了这一功能。当在 WebSphere ESB 内异步执行一个 SCA 模块,并且由于系统故障、组件故障或组件不可用导致执行无法完成,将创建一个失败的事件并将其移动到 Failed Event Manager,后者提供以下功能来处理这类事件:

  • 浏览所有失败事件
  • 通过规定的条件搜索失败的事件
  • 针对某些类型的失败事件编辑数据
  • 重新提交失败事件
  • 删除失败的事件

WebSphere ESB Administration Console 提供了对 Failed Event Manager 的管理式访问:

图 3. Failed Event Manager 管理控制台
Failed Event Manager 管理控制台
Failed Event Manager 管理控制台

新的和增强的中介原语支持

消息记录器增强

图 4. 消息记录器原语
消息记录器原语

在 WebSphere ESB V6.2 之前,消息记录器中介原语将 SMO 记录到一个指定的数据库表模式。V6.2 中的新功能是提供您自己的 Java 日志格式化程序、处理程序和过滤器,当从中介原语传递信息时,这些程序可以在将消息记录到自定义位置(例如普通文件或自定义数据库)之前执行复杂的处理。您还可以即时配置消息记录器,将消息记录到系统临时目录下的文件中。

图 5. 消息记录器原语自定义处理程序支持
消息记录器原语自定义处理程序支持
消息记录器原语自定义处理程序支持

新的 HeaderSetter 中介原语

图 6. Header Setter 原语
Header Setter 原语

V6.2 中引入了 4 个新的中介原语来简化 SMO 内的协议头部操作。这些原语理解相关传输协议的头部结构,并且可以使用它们创建新的头部以及修改头部字段的值。下面显示了使用 SOAPHeaderSetter 的一个例子,并且它在以下模式类型的 SMO 中创建了一个 SOAP:

清单 1. SOAP 头部的样例模式
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://CustomerService"
  xmlns:bons0="http://CustomerService" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="customerType" type="bons0:CustomerHeaderType"<>/xsd:element>
  <xsd:complexType name="CustomerHeaderType">
    <xsd:sequence>
      <xsd:element minOccurs="0" name="type" type="xsd:string"<>/xsd:element>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

可以使用如图 7 所示的工具浏览将用作 SOAP 头部的元素:

图 7. SOAP 头部 Add/Edit 菜单
SOAP 头部 Add/Edit 菜单
SOAP 头部 Add/Edit 菜单

下面的图 8 展示了一些额外的编辑器,可以用于设置任何选定元素定义的值:

图 8. 定义新 SOAP 头部业务对象的属性
定义新 SOAP 头部业务对象的属性
定义新 SOAP 头部业务对象的属性

除了创建 SOAP 头部外,这个原语可以在传入的消息中查找头部并相应地修改或删除值。其他三个头部 setter 原语具有类似的功能。

新的 TypeFilter 中介原语

图 9. TypeFilter 中介原语
TypeFilter 原语

可以使用许多方法按照不同路径在中介流内部传递消息。例如,可以配置一个 Message Filter 中介原语,以根据某个特定 XPath 表达式的值(是否为真)来按多种路径之一传递消息。在 WebSphere ESB V6.2 中,通过使用 Type Filter 中介原语,可以根据消息类型路由消息。

例如,您的消息结构可以包含大量不同对象类型,如下面的图 10 所示。Car 业务对象包含一个名为 carType 的元素,这是 anyType 的 XML 模式定义。这个元素在运行时包含不同业务对象,比如 HondaTypeFordType

图 10. 分层汽车类型结构
分层汽车类型结构
分层汽车类型结构

TypeFilter 可以具有多个输出终端,通过判断工具中定义的消息类型是否匹配运行时中的消息类型,决定采用哪一种路径路由消息:

图 11. TypeFilter 中介原语分支 CarTypes
TypeFilter 原语分支 CarTypes
TypeFilter 原语分支 CarTypes

启用和禁用原语

在 WebSphere ESB V6.2 之前,通过在中介流路径中包含中介原语就可以启用它。然而,在 V6.2 中,需要使用 Enabled 属性并将其值由 true 改为 false,才可以在运行时禁用 MessageLogger, EventEmitterMessageFilter 中介原语。

图 12. 启用/禁用 MessageLogger 原语
启用/禁用 MessageLogger 原语
启用/禁用 MessageLogger 原语

该特性使管理员能够根据消息记录的需求来在运行时启用或禁用日志记录功能。此外,也可以通过中介策略控制日志的启用和禁用,后文将对此进行简要介绍,并且更多细节将出现在本系列第 3 部分中。中介策略提供了更多的灵活性,因为您可以通过消息内容本身来控制日志记录功能。

版本化

中介模块和库可以实现版本化,这样就可以在相同的运行时环境中使用多个版本。导出和导入将自动继承模块的版本,但是可以通过管理的方式配置导入,以通过 Integration Solutions Console 使用特定版本。

增强的 EndpointLookup 中介原语

在 WebSphere Integration Developer 中,添加了对 SCA 模块的版本化支持,从而可以对将被应用到单一 WebSphere ESB cell 的相同模块启用多个版本。作为这些增强的一部分,EndpointLookup 原语得到了增强,包含了一个可以返回最新 SCA 绑定版本的选项,从而能够将 callout 动态更新到最新的可用 SCA 绑定,而且无需修改模块本身。

要启用这一功能,在 EndpointLookup 属性面板中将 Match Policy 设置为 Return endpoint matching latest compatible service version 并填充相关的 VersionModuleExport 字段。

图 13. EndpointLookup 中介原语
EndpointLookup 原语
EndpointLookup 原语

默认情况下,版本号基于 <version>.<release>.<modification> 约定。如果您提供 *,它将检索最新的可用版本 —— 因此 1 将检索最新的 1.* 版本,而 1.1 将检索 1.1.* 版本,依此类推。

增强的聚合场景

FanOutFanIn 中介原语被引入到 WebSphere ESB V6.1 中,支持从多个服务聚合信息。在 V6.1 中,一个聚合块中的服务调用将始终在线程等待模式下完成,其中任何通过 ServiceInvoke 中介原语提交的请求将造成中介流组件中的处理被暂停,直到接收到响应为止。现在在 V6.2 中,可以配置 FanOut 原语,以在请求和响应调用步骤之间继续处理,因此在一个聚合块内可以出现多个未完成的请求。

需要两个配置步骤来在聚合块内支持多个未完成请求。首先,在聚合块内将 ServiceInvoke 原语的调用类型指定为 Async,如下所示:

图 14. ServiceInvoke 中介原语
ServiceInvoke 中介原语
ServiceInvoke 中介原语

其次,如果在迭代模式下操作聚合,那么默认情况下,Mediation Flow Component 将在每次迭代之后等待响应。要修改这个行为并在检索响应之前允许多个迭代,将 FanOut 原语上的 Check for asynchronous response after X messages have been fired 值修改为 0,如下所示:

图 15. FanOut 中介原语配置
FanOut 中介原语配置
FanOut 中介原语配置

将值设置为 0 就可以在处理任何响应消息之前执行所有可能的调用。有关可能值和结果行为的更多信息,请参见本文后面的 参考资料 部分。

新的 DataHandler 中介原语

图 16. DataHandler 中介原语
DataHandler 中介原语

该原语可以在流内部使用,将本地数据转换为业务对象,反之亦然。例如,消息内部可能有一个 String 值,其中包含希望将其转换为业务对象表示的数据。在这个例子中,原语将一个以逗号分隔的字符串转换为 Customer Business Object 逻辑形式:

图 17. DataHandler 原语两端的业务对象
DataHandler 原语两端的业务对象
DataHandler 原语两端的业务对象

DataHandler 原语对于消息网关模式尤其有用,本系列第 2 部分将做介绍。

增强的动态调用

在 WebSphere ESB V6.2 之前,使用 SMO 目标元素的动态调用只能用于 Web 服务和 SCA 调用。在 V6.2 中,这个动态调用得到了增强,可以支持以下绑定类型:

  • JMS
  • MQ
  • HTTP
  • JCA

其中的许多协议需要为调用定义特殊的服务质量(QoS)参数,比如在某些情况下支持安全性。要启用 QoS 参数,使用动态调用支持,并使用所需的特定 QoS 在 Assembly Diagram 上定义一个 Import。Service Message Object (SMO) 具有两个与 TargetAddressType 相关的新可选属性,使您能够引用 Import 名和 bindingTypeTargetAddressType 用于保存动态端点 URL。

清单 2. TargetAddressType 模式
	<complexType name="TargetAddressType">
		<sequence>
			<element name="address" type="anyURI"/>
		</sequence>
		<attribute name="import" type="string"/>
		<attribute name="bindingType" type="smo:BindingTypeType"/>
	</complexType>

中介封装和重用

在 WebSphere ESB V6.1 或更早版本,只能在中介模块中放置一个中介流组件(MFC)。在 V6.2 中,可以将多个 MFC 放到中介模块中,并且可以将 MFC 放到 WebSphere Process Server 模块中,这将更加灵活地支持不同组件之间的抽象和交互,同时避免了对额外的可部署工件的需求。

中介子流也是 WebSphere ESB V6.2 中新增的特性。它们支持在多个中介流中重用常用的中介逻辑。中介子流在其父流的上下文中运行。还可以嵌套子流并将内部子流属性提升到父流的高度,允许动态控制子流处理。

服务网关模式

WebSphere ESB 中的典型集成模式涉及单一的网络可访问端点(接收单一类型的服务请求)和一个中介流组件,它能够在将请求转发给位于单个可访问端点的服务提供商之前处理消息,如下所示:

图 18. 典型 WebSphere ESB 调用模式
典型 WebSphere ESB 调用模式
典型 WebSphere ESB 调用模式

Service Gateway 模式的区别在于公开了一个单一网络可访问端点,它被配置为接收来自大量不同服务消费者的请求,并且这些请求针对各种不同的服务提供商。该模式不同于 Mediation Flow 组件中的典型一对一消费者和提供商映射,它表示的是多对多模型:

图 19. Service Gateway 集成模式
Service Gateway 集成模式
Service Gateway 集成模式

这个新的模式为简化跨所有服务完成通用处理提供了许多机会。在这个一般化的模式中,包含两个可以应用 Service Gateway 的子模式:

  • 动态 —— 针对所有消息执行常用功能,无需访问消息体。
  • 静态 —— 针对所有消息执行常用功能,需要访问消息体。

作为一种工具加速器,新的 Service Gateway 向导可以指导您完成新的 Static 或 Dynamic Service Gateway 的构建,如下所示:

图 20. Service Gateway 向导
Service Gateway 向导
Service Gateway 向导

将在第 2 部分中介绍有关 Service Gateway 模式详细内容。

中介策略(Mediation policy)

在引入中介策略之前,只能通过提升的属性对中介流进行控制。任何从中介流提升的属性都将显示在管理控制台中,并且可以被修改,从而改变流配置。对提升属性的任何此类修改都将影响到引用该属性的所有流,并且修改在所部署的应用程序中是永久的,直到再一次在管理控制台中修改其值。WebSphere ESB V6.2 中的新特性是任何可以进行提升的属性都可通过中介策略进行动态更新,但是任何通过策略控制影响的修改在当前调用流期间只拥有一个生命周期。WebSphere ESB V6.2 中针对提升属性的一个新特性是组概念,它允许使用通用的、描述性的标识符来标记那些具有共同特点的提升属性。

提升属性可以被看作任何中介流中的变化点,其中中介策略用于定义这些变化点使用的值。中介策略使用 WS-Policy 格式,并且在提升属性中,WS-Policy 使用的概念和 WebSphere ESB 定义的概念之间存在一种简单的映射。该功能使您能够创建一个单一中介流,可以根据被处理的消息的内容进行修改。这个功能将在第 3 部分描述。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=407834
ArticleTitle=WebSphere Enterprise Service Bus V6.2 的新特性,第 1 部分: 概述
publish-date=07302009