将支持 WebSphere MQ 的应用程序作为 Web service 进行访问

本方案演示了 Web service,它使用 MIME 作为域为支持 WebSphere MQ 的应用程序提供接口。该方案的消息流以及得到的消息树如下:

该图显示了从消息流发送和接收消息的外部 HTTP 客户机。消息流包含 HTTPInput 节点,该节点连接到名为 Compute1 的 Compute 节点。然后,Compute 节点将连接至 MQOutput 节点。MQOutput 节点将消息放入外部应用程序使用的队列中。该应用程序将消息放入另一个队列中。来自队列的消息进入 MQInput 节点。该节点连接到另一个名为 Compute2 的 Compute 节点。该 Compute 节点连接到 HTTPReply 节点。应答消息发送回 HTTP 客户机。

当 MIME 消息进入消息流时,该消息的顶级 Content-Type 存储在 HTTPInputHeader 树和 MIME 逻辑消息树中。代理也将消息的 Content-Type 副本存储为 Properties 子树中的 ContentType 值。下图显示了消息离开 HTTPInput 节点后的消息树:

该图显示了消息离开 HTTPInput 节点后的逻辑消息树。树的根名称是 Root,并且它有三个子代。它们依次为:Properties、HTTPInputHeader 和 MIME。

第一个 Compute 节点(Compute1)必须在消息中添加 MQMD 头,并保存 HTTP 相关因子以供返回流使用。HTTP 相关因子可以存储在数据库中,或者复制到消息体中。以下示例 ESQL 演示了如何在 XML 消息体中存储相关因子:
SET OutputRoot.XML.X.rid = CAST(InputLocalEnvironment.Destination.HTTP.RequestIdentifier AS CHARACTER);
下图显示了离开 Compute1 后的消息树:

该图显示了消息离开第一个 Compute 节点后的逻辑消息树。树的根名称是 Root,并且它有四个子代。它们依次为:Properties、HTTPInputHeader、MQMD 和 MIME。

如果接收 MQ 消息的应用程序期望消息为 MIME 格式,则需要 MIME 树。Compute1 可以通过创建新的 MIME 树,或者修改并传播现有的 MIME 树生成 MIME 树。要修改消息的 Content-Type,应该使用代理的 ContentType 属性。当修改代理的 ContentType 属性时,会自动更新 MIME 树中的 Content-Type 属性。

当通过 MQInput 节点从消息队列中接收消息时,第二个 Compute 节点(Compute2)必须从消息中除去 MQMD 头,并复原 HTTP 相关因子。如果 Compute1 如上所述从消息体中复制了相关因子,则 Compute2 可以使用以下 ESQL 复原该相关因子:
SET OutputLocalEnvironment.Destination.HTTP.RequestIdentifier = CAST(InputRoot.XML.X.rid AS BLOB);
Compute2 也可以设置明确的 HTTPReplyHeader。

如果输出域是 MIME,则必须创建 MIME 树才能输出该消息。Compute2 根据需要创建新的 MIME 消息或者修改并传播输入 MIME 消息,以创建输出消息。下图显示了消息离开 Compute2 后的消息树:

下图显示了消息离开第二个 Compute 节点后的逻辑消息树。树的根名称是 Root,并且它有四个子代。依次为:Properties、HTTPInputHeader、HTTPReplyHeader 和 MIME。

此方案可能有许多变种。例如,可以使用 MQGet 节点而不是 MQInput 节点创建单个流,这样就无需保存 HTTP 相关因子。但是,其伸缩性可能会较低。协调请求应答样本给出了有关使用 MQGet 节点的更多信息。

相关概念
在 MIME 域中处理消息
MIME 树详细信息
MIME 消息
相关任务
正在开发 ESQL
开发 Java
相关参考
使用 HTTP 作为传输机制创建 Web service
使用 WebSphere MQ 作为传输机制创建 Web service
支持 WebSphere MQ 的应用程序调用 Web service
HTTPReply 节点
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac30040_