IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere | SOA and Web services  >

使用中介流将 WebSphere Service Registry and Repository 与 WebSphere Process Server 集成

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

英文原文

英文原文


级别: 中级

Jun Tao (Tony) Cui, 软件工程师, Federated Integration Test team, IBM China Development Lab

2009 年 3 月 03 日

了解如何在 IBM® WebSphere® Process Server 中使用中介流,以基于用户的输入有选择地调用 WebSphere Registry and Repository 中注册的 Web 服务。本文向您介绍如何将 Registry 与 Process Server 集成,从而使用注册中心存储的元数据实现动态的服务选择和调用。您将学习有关如何创建注册中心内容、构建中介流以及将流部署到 Process Server 的基本知识,从而使您可以向业务流程中引入更多的灵活性和适应性。

引言

WebSphere Service Registry and Repository(以下称为 Registry)是面向服务的体系结构(service-oriented architecture,SOA)环境中用于服务交互端点描述的主元数据存储库。它提供了服务生命周期治理模型。本文描述如何使用中介流将 Registry 与 WebSphere Process Server(以下称为 Process Server)集成。本文将使用一个名为 echo 的简单 Web 服务,描述用于创建存储库内容、在 WebSphere Integration Developer 中构建中介流并将其部署到 Process Server 中的步骤。无论 Web 服务驻留在何处,客户端都可以调用 Web 服务。此外,客户端可以基于不同的参数在多个 Web 服务之间做出选择,例如响应时间和执行成本。此功能允许您设计更加灵活和更容易适应更改的业务流程。本文不介绍用于动态选择 Web 服务的其他选项(例如确定最低执行成本或最佳质量的复杂表达式)。

本文中使用的场景要求读者具备 WebSphere Process Server V6.1.2、WebSphere Service Registry and Repository V6.1 和使用 WebSphere Integration Developer V6.1.2 创建中介流的中级技能水平。





回页首


Registry 和 Process Server 的集成体系结构

SOA 通过重用、松散耦合、灵活性、互操作性、集成和治理提供了业务敏捷性和弹性。SOA 的一个主要支持功能是将服务描述与其实现分离。SOA 在整个服务生命周期中使用与服务描述相关联的描述性元数据。

Process Server 是帮助交付 SOA 基础结构的业务流程实现;它提供了一个公共模型来编排、中介、连接、映射和执行基础 IT 功能。它还提供了消息中介功能,包括服务端点路由。常见使用模式之一涉及到使用作为组织的公开(或外部提供的)服务构造的中介。这些中介流处理传入消息,并就执行传入消息请求所需的任务或步骤做出决策。这通常涉及到将传入消息的执行委托给一个或多个服务(称为后端服务)。

Registry 是用于服务交互端点描述的主元数据存储库。它促进称为服务元数据的服务信息的存储、访问和管理,以便您能够轻松选择、调用、治理和重用您的服务。它还包含有关服务端点的最新信息,该信息支持动态地从注册中心选择服务。

图 1 显示了集成体系结构。


图 1. Registry 和 Process Server 的集成体系结构

中介将对其做出委托的后端服务一般是在开发时指定的。这包括指定有关要使用的各个服务端点的静态信息。随着 SOA 环境变得更加灵活和响应更快速,服务端点定义中会发生大量的更改。修改中介以适应更改后的后端服务带来某些风险,包括增加维护成本和部署这些新服务方面的延迟。

让我们考虑一个不带 Registry 的中介流,其中包含后端服务的静态 URL 绑定。如果后端服务更改为不同的端点,则必须更改中介流以适应新端点。还需要将中介流重新部署到 Process Server。

随着 Registry 的引入,有关后端服务的信息现在存储在注册中心存储库中,并在其中进行维护。Registry 保存了后端服务的所有静态信息,包括端点 URL 和参数。Process Server 上的中介流根据服务接口而不是服务实现访问后端服务。因此,可以在 Registry 中对服务实现做出更改而无需在中介中做出更改。中介可以基于端点或服务质量(例如响应时间和执行成本)选择服务。





回页首


使用中介流将 Registry 与 Process Server 集成

本部分描述如何使用中介流将 Registry 与 Process Server 集成。图 2 显示了 Registry 与 Process Server 之间的集成。


图 2. Registry 和 Process Server 的集成拓扑

存在两个流程服务器 WPS1 和 WPS2。WPS1 承载中介流和一个示例服务。WPS2 承载另一个示例服务。示例服务(两者均名为 echo)具有相同的功能,但是分别使用不同的 responseTime 属性值在 Registry 中进行注册。中介流检查通过用户输入指定的该属性的值,然后选择其属性与该值匹配的 echo 服务。

示例 Web 服务 echo

图 3 显示了 Web 服务 echo 的组装关系图


图 3. 示例 Web 服务组装关系图

清单 1 包含了 echo 服务的实现。该服务回显客户端的输入和应用程序服务器的 IP 地址,以标识哪一个服务器处理该请求。


清单 1. Web 服务 echo 的示例代码
				
public String echo(String input) {
	String output = "Echo from ";
	try {
		InetAddress address = InetAddress.getLocalHost();
		output += address.getHostAddress();
	} catch (UnknownHostException e) {
		e.printStackTrace();
	}
	output += ": " + input;
	return output;
}

创建注册中心内容

在本部分中,我们将了解如何将 echo 服务的元数据加载到注册中心。相关步骤包括:

  1. 将 echo 服务部署到两个不同的流程服务器 WPS1 和 WPS2。
  2. 从两个 echo 服务(文件 EchoService_EchoExport1.wsdl 和 EchoService_EchoExport2.wsdl)中导出 WSDL 文件。
  3. 登录到 Registry 管理控制台,然后单击 Service Documents => Load Documents
  4. 选择第一个流程服务器 WPS1 上的 WSDL 文件,输入文档描述(例如 EchoService_157)和版本(例如 1.0),然后单击 OK

    图 4. 将 WSDL 文档加载到 Registry 中


  5. 在摘要页中单击 Finish
  6. 选择 Service Documents => WSDL Documents,然后单击刚才加载的 WSDL 文档。
  7. 选择 Services => EchoExport1_EchoHttpService => Ports => EchoExport1_EchoHttpPort => Properties,并创建具有如下值的属性:
    responseTime9.99


    图 5. 为 Web 服务添加属性


  8. 重复步骤 3 至步骤 7 将另一个 WSDL 文件加载到第二个流程服务器 WPS2,并为其创建属性:
    responseTime0.11

responseTime 属性指定两个 Web 服务中的每个服务的响应时间。第一个 Web 服务定义了比第二个服务更长的响应时间。(这里使用该属性纯粹用于演示目的,以区分两个服务。)

在 WebSphere Integration Developer 中创建中介流

现在您已在 Registry 中安装了两个 Web 服务,您已经为创建中介流做好准备了,该中介流将基于用户的输入选择然后调用服务。

  1. 在 WebSphere Integration Developer 中创建名为 MediationForWSRR 的中介模块,并导入由 echo 服务实现的接口 Echo。
  2. 打开组装关系图,同时为接口和引用添加 Echo

    图 6. 为中介流添加接口和引用


  3. 右键单击 MediationForWSRR 并选择 Generate Implementation
  4. 在 Mediation Flow Editor 窗口中,将 Echo 连接到 Operation connectionsEcho Partner,并向中介流添加一个 Endpoint Lookup 节点 EndpointLookup1。然后将 Input 连接到 EndpointLookup1,并将 EndpointLookup1 连接到 Callout。将 EndpointLookup1 属性修改为使用接口名称 Echo 并使用缺省注册中心。将其他值保留缺省值并保存更改。

    图 7. 添加 Endpoint Lookup 节点


  5. 为节点 EndpointLookup1 添加一个新属性并保存更改。这指示中介流基于用户指定的 responseTime property 值选择服务。
    Name: responseTime
    Type: XPath
    Value: /body/echo/input


    图 8. 为 Endpoint Lookup 节点添加一个新属性


  6. 单击 Response:echo 选项卡。在画布上,将 Callout Response 连接到 Input Response 并保存更改。

    图 9. 连接两个响应


  7. 为中介流生成导出并将该模块导出为集成模块。

    图 10. 为中介流生成导出






回页首


在 Process Server 中部署和测试中介流

您现在可以将该中介流布署到流程服务器 WPS1。

  1. 登录到流程服务器 WPS1,选择 Service integration => WSRR definitions ,然后单击 New 以创建 WSRR 定义。
  2. 输入 defaultWSRR 作为 WSRR 定义名称,然后单击 Apply

    图 11. 添加 WSRR 定义


  3. 单击 Additional Properties 下面的 Connection properties,输入注册中心 URL 并单击 OK

    图 12. 指定 WSRR 定义属性


  4. 将更改保存到流程服务器。
  5. 启动 Web Service Explorer 以测试中介流。
  6. 输入 0.11 作为输入字符串并单击 Go。您将获得响应“Echo from 172.16.0.153: 0.11”。此响应表明中介流调用了第二个流程服务器 WPS2 上的 echo 服务。此 echo 服务的响应时间为 0.11。

    图 13. 使用输入 0.11 调用 echo 服务


  7. 输入 9.99 作为输入字符串并单击 Go。您将获得响应“Echo from 172.16.0.157: 9.99”。此响应表明中介流调用了第一个流程服务器 WPS1 上的 echo 服务。此 echo 服务的响应时间为 9.99。

    图 14. 使用输入 9.99 调用 echo 服务






回页首


结束语

本文描述了如何将 Registry 与 Process Server 集成。通过使用访问 Registry 的中介流,您可以基于存储在注册中心的元数据动态选择 Web 服务。这种灵活性允许您构建可快速适应后端服务更改的业务流程。您还可以优化那些业务流程,以利用在运行时可用的最佳(或最低成本)服务。



参考资料



关于作者

Tony Cui 的照片

Jun Tao (Tony) Cui 是位于中国上海的 IBM China Development Lab 的一名软件工程师。他在 Federated Integration Test (FIT) 团队工作。他擅长的领域包括企业应用程序集成(Enterprise Application Integration,EAI)和面向服务的体系结构(Service-Oriented Architecture,SOA)。




对本文的评价








IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款