【问题标题】:IBM Datapower - WebSphere MQ - message from transmission queueIBM Datapower - WebSphere MQ - 来自传输队列的消息
【发布时间】: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


【解决方案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

【讨论】:

    【解决方案2】:

    读取传输队列是个坏主意,而且只有在调整安装时才有可能。请参阅 developerWorks DataPower forum posting

    赫尔曼。

    【讨论】:

      猜你喜欢
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多