2

我试图通过查看对象描述符(MQOD)的 ResolvedQName 字段在 open_after 和 put1_before API 退出中获取已解析的队列名称(即别名队列的基本队列名称)。但它似乎不包含这些出口中的基本队列名称(即为空白或某些意外值,例如......'1.59.15')。但是,我可以看到 ObjectName 已使用别名队列名称正确设置。为清楚起见,我的别名队列和基本队列都具有相同的本地 QM。

所以我想知道在使用别名队列进行 (open + put) 或 put1 调用时是否有办法在 MQ API 出口中获取已解析的队列名称。任何帮助,将不胜感激。

4

2 回答 2

1

您需要读取 cmqc.h 文件中的 MQOD 结构。仅当应用程序使用 MQOD 结构的版本 3(或更高版本)时,ResolvedQName 字段才可用。如果您检查 MQOD 的版本号,我敢打赌您会看到它是版本 1 或 2。

注意:MQOD 的默认版本号是 1。因此,ResolvedQName 字段不可用。

最后,MQGMO 和 MQPMO 结构都具有从结构版本 1 开始的 ResolvedQName 字段。

于 2012-12-14T19:16:26.537 回答
1

我猜你正在使用该MQPMO_SYNCPOINT选项?您是否也在使用该MQPMO_SYNC_RESPONSE选项?请参阅有关该MQPUT1主题的最后一条注释,其中指出:

当使用 MQPMO_SYNCPOINT 发出 MQPUT1 调用时,默认行为会更改,因此 put 操作异步完成。这可能会导致某些应用程序的行为发生变化,这些应用程序依赖于返回的 MQOD 和 MQMD 结构中的某些字段,但现在这些字段包含未定义的值。应用程序可以指定 MQPMO_SYNC_RESPONSE 以确保同步执行 put 操作并完成所有适当的字段值。

换句话说,在PUT1名称解析发生之前,将其移交给 WMQ,并将控制权返回给程序。

在任何情况下,PUT1_BEFORE出口点都不会解析名称。假设MQPMO_SYNC_RESPONSE已指定,您应该能够在PUT1_AFTER出口点找到它。

如果您从SupportPac MA0W安装 API 出口,它会将所有控制块和标志解析为英文并格式化列表。如果您查看该出口的输出,您应该能够准确地看到哪些出口点和字段包含已解析的名称以及何时。

因此,请务必指定MQPMO_SYNC_RESPONSE并考虑使用 MA0W API 出口作为参考和学习帮助。

于 2012-12-14T17:06:53.160 回答