1

遇到了问题。我需要将 RFH2 消息放入标头中带有属性的 MQ。如果使用 MQ API:

MQCRTMH MQSETMP MQPUT

那么只要名称属性不包含前缀(例如,'Property1'),一切都会正常工作 - WRKMQMQ 显示消息是 RFH2 格式,显示它包含属性,显示正确的属性列表......

但是,一旦我尝试添加像“ctx.Property1”这样的前缀,一切都会停止工作......但是,上述函数都没有返回错误。消息将放置在 MQ 中,但没有 RFH2 标头和属性。

问题是,我如何正确地为属性名称添加前缀?

4

1 回答 1

0

IBM 文档中缺少几个要点:

  1. 如果未明确指定文件夹,MQSETMP会将属性放在usr文件夹中(即PropertyNameusr.PropertyName完全相同)。但是,如果明确指定了文件夹,则将属性放置在其中,并且ctx.PropertyName不等于usr.ctx.PropertyName(在第一种情况下,将属性放置在usr之外ctx文件夹中,在第二种情况下 - in ctx inside usr ) - 以便将属性放置在 usr 文件夹的文件夹ctx中,您必须明确指定 usr.ctx。这种未描述的行为可能会令人困惑。
  2. (这是主要的事情) - 没有任何地方描述如果usr文件夹为空, MQPUT不会创建RFH2消息头,即使在usr之外还有另一个非空文件夹。但同时,如果 usr 文件夹中还有其他属性,则会创建标头,并且它将包含usr文件夹和它之外的其他文件夹。

因此,在我的情况下,将属性命名为不是ctx.PropertyName而是usr.ctx.PropertyName是正确的。

应该记住(这也没有反映在文档中),如果将PropertyNameusr.PropertyName传递给MQSETMP,则收到消息后的MQINQMP调用将返回PropertyName形式的属性名称,而没有usr。但是如果usr.ctx.PropertyName被传递给MQSETMP,那么MQINQMP将返回全名usr.ctx.PropertyName

于 2021-09-22T06:48:44.150 回答