在请求-响应流中使用 MQGet 节点

有关在 MQGet 节点内为完成以上操作而进行的处理的详细信息,请参阅MQGet 节点消息处理。有关构造此类流的详细信息,请参阅样本协调请求应答样本

介绍

本页介绍了 MQGet 节点在请求-响应流中的使用,描述了节点如何处理输入消息(根据 LocalEnvironment 和您设置的输入参数)以构造输出消息。

两个应用程序之间的请求-响应流允许其中一个应用程序从另一个应用程序请求消息。 下图中显示了此类流:

在下面的文本中对此图进行了描述。

在该图中,请求应用程序将一条消息放置到应答应用程序的“请求”输入队列。 应答应用程序然后处理消息,并将一条应答发送到来自请求应用程序的原始消息中指定的“应答”队列。

如果要替换或者增强其中一个 应用程序,而不更改另一个,那么需要在这两个应用程序之间变换消息。 要做到这点,可以在它们之间插入代理,如下图所示:

在下面的文本中对此图进行了描述。

既然配置了一个队列别名或类似的设备,那么请求应用程序会将其请求消息放到“协调的请求应答”代理消息流的输入队列中。在 前面的示例中,将此消息直接放到了应答应用程序的输入队列中。 “协调的请求应答”流将消息变换到适用于应答应用程序的格式,并将其传递到其输入队列。 它还保存原始的请求应用程序的应答队列详细信息,并将这些详细信息恢复到从应答应用程序接收到的应答消息,从而使应答消息能正确地公布回请求应用程序。

MQGet 节点可放在流中的任何位置,并在其输入终端上接收从前面节点传播来的输入树。 它然后使用从配置的 WebSphere MQ 队列检索到的消息来构建结果树。 最后,它使用输入树和结果树构建一个输出树,然后将输出树传播到其输出、警告或失败终端,具体是哪个终端则取决于节点的配置以及 Get 操作的结果。

有关构造流的更多详细信息,请参阅样本:协调请求应答样本

如何使用 LocalEnvironment

从前面节点传播而来的 LocalEnvironment 由 MQGet 节点读取和更新。

  • 将从 ${inputMQParmsLocation}.MQGMO.* 读取 MQGMO 结构
  • MQ 完成和原因节点将放在 ${outputMQParmsLocation}.CC 和 .RC 中
  • 如果 MQGMO 树在本地环境中,那么将通过节点和传播的下游所用的值来更新该树
  • 如果 ${inputMQParmsLocation}.MQMD 存在,那么传递到 MQGET 调用本身(包含在输入消息中指定的值或由节点生成的值)的 MQMD 将放在该位置,删除该位置已有的任何内容。

${inputMQParmsLocation} 是在请求属性选项卡上 MQGet 节点属性输入 MQ 参数位置中设置的值。

${outputMQParmsLocation} 是在结果属性选项卡上 MQGet 节点属性输出 MQ 参数位置中设置的值。

有关这些属性的详细信息,请参阅MQGet 节点

概括而言:
${inputMQParmsLocation}
  • QueueName:可选,覆盖 MQGet 节点属性队列名称
  • InitialBufferSize:可选,覆盖 MQGet 节点属性初始缓冲区大小
  • MQGMO.*:可选,MQGet 节点将使用的 MQ Get 消息选项。
${outputMQParmsLocation}
  • CC:MQ Get 调用完成代码。
  • RC:MQ Get 调用结果代码。
  • MQGMO.*:MQ Get 消息选项,如果存在,用在 ${inputMQParmsLocation} 中。
  • MQMD:接收到的消息的 MQ 消息描述符。

如何构造 MQGet 调用的 MQMD

  • 如果不提供输入 MQMD,则使用缺省 MQMD,如 WebSphere MQ Application Programming Reference 中所述。
  • 如果您提供输入 MQMD,则以以下两种方式之一使用该 MQMD:
    • 如果设置了属性使用完整的输入 MQMD,则完整地 使用该输入 MQMD。
    • 如果未设置属性使用完整的输入 MQMD,则准备一个缺省的 MQMD,然后,如果设置了复选框 messageIDcorrelID,则 将标识分别从输入 MQMD 复制到缺省 MQMD。

下图略为详细地显示了 MQGet 节点如何构造 MQMD,以用在对 WebSphere MQ 的调用上:

在上面的文本中对此图进行了描述。

如何构造输出消息树

下图概述了如何通过将来自先前节点的输入树,与来自 MQGet 调用的结果树组合而构造输出消息树:

在上面的文本中对此图进行了描述。

这是一个示例,其中 MQGet 节点属性如下配置
copyMessage
copyEntireMessage
generateMode
message
outputDataLocation
OutputRoot.XML.A
resultDataLocation
ResultRoot.XML.C
在此示例中,按照以下顺序构造输出树:
  1. 整个输入树复制到输出树,包括带有子代 A 以及 A 的子代 B 的 XML 分支。
  2. 从结果树,将 XML 分支的子代 C 以及 C 的子代 D 放到输出树的位置 OutputRoot.XML.A。A 的所有以前的内容(值和子代) 均失去,并替换成 C 的内容,包括其具有的所有值和子代,在此情况下是子代 D。
  3. 输出树中的位置仍称为 A。
下图直观地说明了这一过程:

在上面的文本中对此图进行了描述。

消息树示例

下面的一些示例将显示如何根据上述规则构造消息树。

表 1. 一个示例 Input、LocalEnvironment 和 MQGet
具有与以下类似的消息套件: MQGet 返回的消息是:
InputRoot
MQMD
{input message mqmd}
MQRFH2
{input message mqrfh2}
XMLNS
{input message body}
InputLocalEnvironment
MQ
GET
MQGMO
MatchOptions = MQMO_MATCH_CORREL_ID
MQMD(无子代)
MyData
MQMD
{input mqmd} (with CorrelID = {correct Correlation ID as binary})
更新开始
ResultRoot
MQMD
{result message mqmd}
MQRFH2
{result message mqrfh2}
XML
{result message body}
更新结束
表 2. 生成的输出消息树的示例,符合详细描述的 MQGet 节点属性设置。
具有以下设置: 生成的结果输出消息套件是:
inputMQMDLocation
InputLocalEnvironment.MyData.MQMD
copyMessage
copyEntireMessage
copyLocalEnv
copyEntireLocalEnvironment
generateMode
messageAndLocalEnvironment
outputDataLocation
InputLocalEnvironment.MyData.ReturnedMessage
OutputRoot
MQMD
{input message mqmd}
MQRFH2
{input message mqrfh2}
XMLNS
{input message body}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo used for get}
MQMD
{mqmd used for get}
CC = 0
RC = 0
MyData
MQMD
{input mqmd} (with CorrelID = {correct Correlation ID as binary})
ReturnedMessage
MQMD
{result message mqmd}
MQRFH2
{result message mqrfh2}
XML
{result message body}
resultDataLocation
ResultRoot.XML
OutputRoot
MQMD
{input message mqmd}
MQRFH2
{input message mqrfh2}
XMLNS
{input message body}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo used for get}
MQMD
{mqmd used for get}
CC = 0
RC = 0
MyData
MQMD
{input mqmd} (with CorrelID = {correct Correlation ID as binary})
ReturnedMessage(带有来自 ResultRoot.XML 的任何属性和值)
{result message body}

此树是执行从 ${resultDataLocation} 到 ${outputDataLocation} 的分配时的有效结果。复制 源元素的值,如同都是包含属性的子代一样。

copyLocalEnv
none
OutputRoot
MQMD
{input message mqmd}
MQRFH2
{input message mqrfh2}
XMLNS
{input message body}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo used for get}
MQMD
{mqmd used for get}
CC = 0
RC = 0
MyData
ReturnedMessage(带有来自 ResultRoot.XML 的任何属性和值)
{result message body}

此树具有用于 OutputLocalEnvironment 中的 get 的 MQMD,因为输入 MQ 参数位置在其下面有一个 MQMD 元素。 即时未复制输入树,但 MQMD 元素的存在造成了用于 get 的 MQMD 要放置在输出树中。

outputDataLocation
<blank>
copyLocalEnv
copyEntireLocalEnvironment
OutputRoot
MQMD
{result message mqmd}
MQRFH2
{result message mqrfh2}
XMLNS
{result message body}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo used for get}
MQMD
{mqmd used for get}
CC = 0
RC = 0
MyData
MQMD
{input mqmd} (with CorrelID = {correct Correlation ID as binary})

这种情况下 copyMessage 的设置对最终输出树不产生影响。

相关概念
消息流概述
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac34680_