默认情况下,使用 WebSphere MQ 配置部署的资产将 MQMD characterSet、messageId 和 correlationId 从传入的请求 MQ 消息中拷贝到输出的响应 MQ 消息。这是默认关联机制。
如果要求不同的关联机制(如让虚拟资产拷贝传入的请求 messageId 到输出的响应 correlationId 中),则您可以在消息响应程序级别上对它进行配置。为此:
- 将 Header Data Bank 工具链接到响应程序传入的头请求中,并提取 messageId(或所需的 MQMD 字段)值(请查阅 Header Data Bank)。
- 在“消息响应程序传输头”选项中,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 记录向导。.