默认情况下,使用 WebSphere MQ 配置部署的资产将 MQMD characterSet、messageId 和 correlationId 从传入的请求 MQ 消息中拷贝到输出的响应 MQ 消息。这是默认关联机制。

如果要求不同的关联机制(如让虚拟资产拷贝传入的请求 messageId 到输出的响应 correlationId 中),则您可以在消息响应程序级别上对它进行配置。为此:

  1. 将 Header Data Bank 工具链接到响应程序传入的头请求中,并提取 messageId(或所需的 MQMD 字段)值(请查阅 Header Data Bank)。
  2. 在“消息响应程序传输头”选项中,MQ(请查阅 Transport Header Tab),添加 messageId(或所需的 MQMD 字段名),并使用数据库提供的请求 messageId 或字段参数化其值。此方法可根据需要用于 MQMD MQMessage 字段。
    • 有关 Virtualize 识别并处理的 MQ Message MQMD 字段名称列表,请查阅 MQMD 文档

注意,为了让值在数据库和通讯报文视图中具有可读性,Virtualize 将显示字节数组字段的十六进制编码表示。然而,实际的字节内容将从请求正确地传输到响应消息,以此保护原始字节内容。

在关联中使用 RFH2 头文件,用于具有自定义消息格式的 MQ 消息

对于使用自定义消息格式的 MQ 消息,如果 RFH2 头文件没有明确保留在自定义消息转换器中,则无法在以响应器关联为目的的 XML 消息中对其访问。如果响应器关联需要 RFH2 头文件,则可以通过自定义脚本上下文以 XML 格式的消息字符串的一部分访问它们。

以下 Jython 脚本提供如何实现此任务的示例。它测试请求以查看消息域是否设置为 sampleDomain ,以及应用程序为 sampleKey 定义的属性是否设置为 sampleValue

from com.parasoft.api import CorrelationScriptingHookConstants
from com.parasoft.xml import XMLUtil
from org.w3c.dom import *
from javax.xml.xpath import *
from java.lang import *

def match(context):
  msg = context.get(CorrelationScriptingHookConstants.MESSAGE_STR)
  if msg != None:
    xmlDocument = XMLUtil.buildDocumentFromString(msg)
    cond1 = matchRFH2Header(xmlDocument, "mcd/Msd", "sampleDomain")
    cond2 = matchRFH2Header(xmlDocument, "usr/sampleKey", "sampleValue")
    return cond1 and cond2
  return false
def matchRFH2Header(xmlDocument, path, val):
  xPathFactory = XPathFactory.newInstance();
  xpath = xPathFactory.newXPath()
  expression = xpath.compile("/RFH2Message/RFH2Headers/" + path + "/text()")
  elementValue = expression.evaluate(xmlDocument)
  return String(elementValue).equals(val)

以下路径可用于访问不同 RFH2 区域的值:


消息内容说明符

  • "mcd/Msd" - 消息域
  • "mcd/Set" - 消息集
  • "mcd/Type" - 消息类型
  • "mcd/Fmt" - 输出格式

发布命令和订阅命令

  • "psc/Command"
  • "psc/Topic"
  • "psc/SubIdentity"
  • "psc/QName"
  • "psc/QMgrName"
  • "psc/SubPoint"
  • "psc/Filter"
  • "psc/SubName"
  • "psc/SubUserData"
  • "psc/RegOpt"

应用程序定义的属性

  • "usr/*"

Java 消息传递服务

  • "jms/Dst" - 目的地
  • "jms/Rto" - 回复给
  • "jms/Tms" - 时间戳
  • "jms/Exp" - 有效期
  • "jms/Cid" - 关联 d
  • "jms/Pri" - 优先性
  • "jms/Dlv" - 传递模式

有关使用脚本关联的详情,请查阅 Custom Correlation

故障排除

如果消息没有正确关联,则会生成错误消息,或不会响应给消息,检查报头中指示的编码与消息正文中实际使用的编码是否不匹配。如果发生该情况,则您需要使用 JRE 系统属性覆盖预期的消息格式。

例如,如果您的报头指示 characterSet=37,而实际消息以 UTF-8 格式编码,则您便使用以下 JRE 系统属性:

mq.force.utf8.encoding=true

通过使用属性名后的 -J-D 启动 Virtualize。例如:

virtualize.exe -J-Dmq.force.utf8.encoding=true

相关属性, mq.force.custom.encoding=UTF-8,在查看或使用自定义消息格式时(本机 MQ 消息内容和 XML 转换时)应用到 MQ 记录向导。.

  • No labels