内容


使用 IBM WebSphere Message Broker 管理 Web 服务

Comments

概述

本文基于最近的客户概念验证(Proof of Concept,PoC)项目。作为 PoC 的一部分,实现了 WebSphere Message Broker V6 消息流的基本概念和体系结构,以在 CICS 应用程序和 UNIX Web 服务之间提供一个接口。另外还添加了额外的需求来说明可以方便地对此体系结构进行扩展。客户注意到需要包含错误处理和恢复逻辑,也在设计上对此进行了考虑。

一般 PoC 需求

进行 PoC 时,理解所需的东西将有所帮助。

  1. 使用 WebSphere Message Broker 在 CICS COBOL 应用程序和一系列基于 UNIX 的 Web 服务之间提供接口。
  2. 必须将原始 WebSphere MQ 消息 Header 与原始 COBOL 消息及其关联的更新一起返回。
  3. 每个 COBOL 消息可能需要一个或多个 Web 服务。
  4. 有些 Web 服务可能依赖于消息流之前执行的 Web 服务的结果。
  5. 使用 WebSphere Message Broker Mapping 节点利用提供的 WSDL 构造 Web 服务 SOAP 信封。
  6. 需要对日期和时间进行数据转换。必须对 Web 服务返回的日期和时间值进行转换,如返回的“Wed Feb 22 13:32:14 PST 2006”必须转换为“2006-02-23-03.32.14.000000”。
  7. 消息集通过 COBOL 和 WSDL 导入器定义。
  8. COBOL 消息集应提供小写名称。

解决方案体系结构

图 1. 解决方案体系结构
解决方案体系结构
解决方案体系结构

上面的示例中显示了具有单个 Web 服务的基本解决方案体系结构。不过,图中并没有显示解决方案的基本组成部分和此白皮书的目的。此体系结构所依赖的基础是,ESQL“Propagate to Terminal”函数的功能以及保留通过不同路径保存在 Environment 中的信息和从名为 StoreInputMsg 的初始 Compute 节点访问此信息的能力。

图 2. 解决方案体系结构详细信息
解决方案体系结构详细信息
解决方案体系结构详细信息

我们将首先处理使用 WebSphere Message Broker V6 来在 CICS 应用程序和 UNIX Web 服务之间提供接口的需求。客户已经有了使用 CICS 和 WMQ 的经验,已编写了一个新 CICS 应用程序发送 COBOL 消息和接受响应。在此接口中有两个重要的设计元素。首先,使用了单个 COBOL 记录定义来描述应用程序发送和接收的消息。其次,应用程序希望返回原始 WebSphere MQ 消息 Header。在典型的“服务器”应用程序中,会使用入站消息 ID 来创建入站相关 ID,而与此不同的是,此应用程序需要以逻辑方式对多个消息进行“分组”。此工作由应用程序通过为每个消息组使用唯一的相关 ID 来实现。

初始原型仅限于单个服务请求,如上面的示例中所示。可以在扩展项目时添加其他 Web 服务请求。可以在无需对解决方案体系结构进行较大更改的情况下最多添加三个驱动 Web 服务请求的唯一路径。通过再添加一个 Compute 节点,并“复制”StoreInputMsg Compute 节点的功能,甚至可以进一步增加可添加的潜在数量。

Web 服务请求的每个路径都从初始 Compute 节点开始,终止于 Passthrough 节点。采用 Passthrough 节点的唯一原因是为了提供交互测试期间放置断点的位置。开发人员在消息流的开发和测试期间大量使用了交互调试程序。

我们在此白皮书中并未考虑 Mapping 节点。原始消息和服务请求之间的映射是简单的一对一操作,涉及到输入数据的一个子集。由于 Mapping 节点的目标是一个 HTTPRequest 节点,因此有必要在“Select how the map will be used”面板选择映射属性、Header 和消息主体的选项。不过不会映射 WebSphere MQ 消息 Header,因为并未将其与 HTTPRequest 节点一起使用。

响应的处理也相当简单,最好在 Compute 节点(名为 Extract_Response)中完成;返回的相关信息在此节点中保存到环境中。Environment 树中元素的名称与 SOAP webreply 的信封的主体中的名称匹配。请注意,命名空间定义并不保留在 Envirwebonment 中。

正如需求中说明的,需要对一个日期和时间戳字段进行转换,例如,必须将日期和时间值“Wed Feb 22 13:32:14 PST 2006”转换为“2006-02-23-03.32.14.000000”。此工作由以下 ESQL 完成:

清单 1. 日期转换
   Declare WSDate CHAR Environment.MRM.Body."service"."service-footer"."time-stamp" ;
   DECLARE MyTimeStamp TIMESTAMP;
   Declare pattern CHAR 'EEE MMM dd HH:mm:ss zzz yyyy';
   Set MyTimeStamp = Cast(WSDate as TIMESTAMP FORMAT pattern);
   Declare DB2Date CHAR 
       CAST(EXTRACT(YEAR   FROM MyTimeStamp) AS CHAR FORMAT '0000') || '-' ||
       CAST(EXTRACT(MONTH  FROM MyTimeStamp) AS CHAR FORMAT '00')   || '-' ||
       CAST(EXTRACT(DAY    FROM MyTimeStamp) AS CHAR FORMAT '00')   || '-' ||
       CAST(EXTRACT(HOUR   FROM MyTimeStamp) AS CHAR FORMAT '00')   || '.' ||
       CAST(EXTRACT(MINUTE FROM MyTimeStamp) AS CHAR FORMAT '00')   || '.' ||
       CAST(EXTRACT(SECOND FROM MyTimeStamp) AS CHAR FORMAT '00')   || '.' || '000000';
    SET Environment.MRM.Body."service"."service-footer"."time-stamp" = DB2Date;

WebSphere Message Broker V6 还提供了为 CAST 函数指定 FORMAT 和“pattern”值的新功能。此日期和时间戳示例就使用了此选项。将随后使用描述日期和时间值的布局的模式来将该信息转换为 WebSphere Message Broker 时间戳值。将随即对该信息进行提取,并重新组合为字符串,在日期和时间之间会添加一个斜杠,并在最后添加毫秒值,以符合 CICS 应用程序的要求。

我们现在需要了解一下初始 StoreInputMsg Compute 节点。正如前面提到的,该设计基于 ESQL ESQL Propagate 谓词提供的功能。此谓词在 WebSphere Message Broker V6 得到了增强,包括了标识多个输出终端之一的功能。Compute 节点可以采用逻辑和物理的方式分组到多个部分。基本设计基于这样的需求,即每个到 Web 服务请求的路径都从原始 COBOL 消息的副本开始,最终的应答同时需要 WebSphere MQ 消息 Header 和使用结果进行了增强的原始消息。

这个原始消息重用需求可使用 Propagate 节点方便地予以满足。每次在完成了单个路径且控制返回给 Propagate 节点后的语句时,原始消息 (InputRoot) 就可用。

因此 Compute 节点中的 ESQL 就变得非常直接而简单。初始 Web 服务仅基于原始消息。此 ESQL 处理初始请求。

清单 2. Propagate
SET OutputRoot = InputRoot; 
 Propagate to Terminal 'out1';

随后会将 Out1 连接用于到 Web 服务的路径中。可以采用相同的方式使用其他编号的输出终端处理另外三个 Web 服务。其中的每个请求都可以依赖于之前的一个或多个请求的结果,因为这些结果保存在 Environment 中。此外,如果存在其他仅依赖于原始消息的服务请求,可以将其直接连接到 Out1 终端。每个 Web 服务路径末端的 Compute 节点可以使用 Environment 树中一个唯一的部分来提供参考信息。

完成了所有 Web 服务路径后,Compute 节点中的最后一步是使用来自 Web 服务的结果更新响应消息。由于为 Web 服务请求使用了经过编号的输出终端,因此可以通过常规输出终端发送最终响应。最后,对小写 COBOL 名称的需求是通过为 COBOL 导入器取消选中“Preserve Case in Variable Names”选项满足的。

总结

此解决方案体系结构和实现大量使用了 WebSphere Message Broker 的几个新功能和/或增强功能。新 WSDL 导入器将 SOAP 信封的定义简化为了基于 MRM 的消息,从而允许使用新的 Mapping 节点。Compute 节点上的多个新输出终端均可帮助简化流,并能消除对 Filter 或 RouteToLabel 节点的需求。利用 CAST 语句的新 FORMAT 选项可非常方便地在两种日期和时间格式之间进行转换。


相关主题


评论

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services
ArticleID=200166
ArticleTitle=使用 IBM WebSphere Message Broker 管理 Web 服务
publish-date=03062007