【发布时间】:2016-02-18 12:30:54
【问题描述】:
我必须从一个 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>
【问题讨论】:
-
这是一个非常奇怪的请求。唯一应该从 XMIT(传输)队列中读取消息的进程是 MCA(消息通道代理)。 MCA 使用 XMIT 队列将消息从一个队列管理器移动到另一个队列管理器。消息到达目的队列后为什么不处理呢?因此,您不需要处理 MQXQH 标头。
-
您能否详细说明为什么需要这样做。你发现你做不到这一事实应该让你明白这不是一件正常的事情。也许如果我们知道为什么我们可以提供替代建议。
-
感谢您的回复。我知道这很奇怪,但我必须这样做。那么,您能帮我获取消息、验证消息、删除 MQXQH 标头、将其发送到另一个带有 MQRFH 标头的队列吗?
-
当人们将直接的 QMgr 到 QMgr 通道连接转换为使用 DataPower 设备时,通常会这样做。这允许设备充当策略执行点、桥接 DMZ、提供故障转移功能、扫描恶意有效负载等,并且无需更改任何应用程序或 QMgr 配置即可执行此操作。与进行 DataPower 更改相比,更改 MQ 或应用程序很可能是更有利的业务案例,但没有人可以在不知道如何更改 DataPower 的情况下做出该决定。
标签: ibm-mq ibm-datapower