Ibm mq IBM Datapower-WebSphere MQ-来自传输队列的消息

Ibm mq IBM Datapower-WebSphere MQ-来自传输队列的消息,ibm-mq,ibm-datapower,Ibm Mq,Ibm Datapower,我必须从一个MQ管理器(传输队列)获取消息,从MQXQH头获取后端队列的名称,验证消息,创建不带MQXQH头的新消息,并将其发送到另一个MQ管理器。 现在我可以获取后端队列(使用XSLT)并发送消息,但我不能更改消息,因为我看不到请求中的数据。 有人能帮我吗? 当前XSLT: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform

我必须从一个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>

读取传输队列是个坏主意,只有在调整安装后才可能读取。请参阅developerWorks DataPower上的这篇文章


Hermann.

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

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

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

这是一个非常奇怪的要求。应该从XMIT(传输)队列读取消息的唯一进程是MCA(消息通道代理)。MCA使用XMIT队列将消息从一个队列管理器移动到另一个队列管理器。为什么不在消息到达目标队列后处理它?因此,您不需要处理MQXQH头。请详细说明为什么需要这样做。事实上,你已经发现你不能这样做,这应该让你明白这不是一件正常的事情。也许如果我们知道为什么我们可以提供其他建议。谢谢回复。我知道这很奇怪,但我必须这么做。所以,您能帮助我获取消息、验证消息、删除MQXQH头并将其发送到另一个带有MQRFH头的队列吗?通常,人们在将直接QMgr转换为QMgr通道连接以使用DataPower设备时会这样做。这允许设备充当策略实施点、桥接DMZ、提供故障切换功能、扫描恶意有效负载等,并且无需进行任何应用程序或QMgr配置更改。很可能进行MQ或应用程序更改是比进行DataPower更改更有利的商业案例,但在不知道如何进行DataPower更改的情况下,任何人都无法做出决策。