【问题标题】:IBM MQ PCF parameters orderIBM MQ PCF 参数顺序
【发布时间】:2020-06-07 19:54:52
【问题描述】:

有谁知道为什么当我尝试使用 MQCMD_INQUIRE_CHANNEL 命令按此顺序使用这些参数查询频道时出现错误 MQRCCF_MSG_LENGTH_ERROR:

ChannelName (MQCFST)
ChannelAttrs (MQCFIL) can have any single or multiple attributes except MQIACF_ALL. With MQIACF_ALL works OK.
IntegerFilterCommand (MQCFIF)

如果我更改顺序(将 MQCFIL 结构放在最后),它可以正常工作:

ChannelName (MQCFST)
IntegerFilterCommand (MQCFIF)
ChannelAttrs (MQCFIL)

对于任何 QAttrs 值,类似的队列查询 (MQCMD_INQUIRE_Q) 在这两种情况下都可以正常工作:

QName (MQCFST)
QAttrs (MQCFIL)
IntegerFilterCommand (MQCFIF)

QName (MQCFST)
IntegerFilterCommand (MQCFIF)
QAttrs (MQCFIL)

调试信息:

runmqras

message

part of the code

对我来说最奇怪的事情之一是 MQIACF_ALL 参数,简单地将其替换为任何其他允许的参数(例如 MQCACH_DESC)会中断查询。

PS 我使用 python(没有 MQAI 的 pymqi 分支)来创建 MQ PCF 消息。 如果确实需要,我可以创建示例 C 程序以供批准,但我多次检查生成的二进制消息,它没有问题。

【问题讨论】:

  • "有人知道为什么吗?" - MQ 命令服务器中的代码有缺陷?
  • 也许有人已经看到了这个问题

标签: ibm-mq


【解决方案1】:

我强烈怀疑这是 MQ 中的一个错误。您可以在运行程序时跟踪队列管理器上的命令服务器吗?命令服务器进程名为 amqpcsea,或 Windows 上的 amqpcsea.exe。在这些命令中,将 QMGRNAME 替换为您的实际队列管理器名称,并将 TSxxxxxxxxx 替换为您打开后的 IBM 案例编号:

strmqtrc -m QMGRNAME -p amqpcsea[.exe]
/* Run the program to get the error */
endmqtrc -a
runmqras -qmlist QMGRNAME -section defs,trace -caseno TSxxxxxxxxx

从 runmqras 上传 zip 文件以及二进制命令消息(因为它显示您可以捕获它),我们可以查看它。

您能否也澄清一下您对 MQIACF_ALL 的看法?当您说用任何其他参数替换它会中断查询时,在这种情况下您会遇到什么样的错误?听起来好像可能有两个错误,我想确保我正确理解它们。

至于参数顺序,我知道的唯一限制是分布式(非z/OS)平台首先需要所需的参数:https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.1.0/com.ibm.mq.ref.adm.doc/q086880_.htm

【讨论】:

猜你喜欢
  • 2016-02-24
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
  • 2016-10-06
  • 1970-01-01
相关资源
最近更新 更多