在mq api exit中获取别名队列的已解析队列名称

时间:2012-12-14 16:46:18

标签: api queue alias ibm-mq exit

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

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

2 个答案:

答案 0 :(得分: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出口作为参考和学习辅助。

答案 1 :(得分:1)

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

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

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