1

我必须从一个 MQ 管理器(传输队列)获取消息,从 MQXQH 标头获取后端队列的名称,验证消息,创建没有 MQXQH 标头的新消息并将其发送到另一个 MQ 管理器。现在我可以获取后端队列(使用 XSLT)并发送消息,但我无法更改消息,因为我看不到请求中的数据。有人可以帮助我吗?当前 XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:dp="http://www.datapower.com/extensions" extension-element-prefixes="dp" exclude-result-prefixes="dp">
<xsl:template match="/">
 <!-- Get the MQXQH headers -->
 <xsl:variable name="MQXQH" select="dp:request-header('MQXQH')" />
 <!-- Parse the MQXQH headers to XML format -->
 <xsl:variable name="parsedMQXQH" select="dp:parse($MQXQH)" />
  <!-- log MQXQH -->
 <xsl:message dp:priority="alert">
 <xsl:copy-of select="$parsedMQXQH" />
 </xsl:message>
 <!-- extract destination Queue -->
 <xsl:variable name="destQ" select="$parsedMQXQH//RemoteQName"></xsl:variable>
 <!-- extract destination Manager -->
 <xsl:variable name="destM" select="$parsedMQXQH//RemoteQMgrName"></xsl:variable>
 <!-- set destination -->
 <dp:set-variable name="'var://service/routing-url'" value="concat('dpmq://KSSH_MQQM_AC/?RequestQueue=',$destQ)" />
</xsl:template>
</xsl:stylesheet>
4

2 回答 2

1

您可以使用用 JS 编写的 MQ 标头解析器(下面的链接)。它使用原始 MQMD 标头解析 MQXQH 标头,并将其从消息正文中剥离。

接下来,您应该从MQXQH.MsgDesc字段中获取原始 MQMD 标头并将其设置为 MQMD 请求标头。此外,您应该设置 MQOD 标头

MQOD.ObjectQMgrName = MQXQH.RemoteQMgrName
MQOD.ObjectName = MQXQH.RemoteQName

最后,您应该删除 MQXQH 标头。现在您有了原始 MQMD 标头和 MQOD 标头以及必要的路由信息​​。设置了 MQOD 标头的路由 URL 可以不指定请求队列参数:

 dpmq://QMNAME/?RequestQueue=(something that will not be used or leave blank).
https://gitlab.com/ksgerastenok/datapower/-/blob/master/domain/headers.js
于 2020-09-18T19:28:00.183 回答
0

读取传输队列是个坏主意,只有在调整安装时才有可能。请参阅 developerWorks DataPower论坛上的帖子

赫尔曼。

于 2015-12-13T10:47:44.300 回答