[英]IBM MQ 7.5 using C-API to check if local or non-local cluster queue
我有以下问题(简化):
两个队列管理器-QM1和QM2-组成一个集群。
QMgr QM1
QMgr QM2
我可以打开别名队列进行查询,请求MQCA_BASE_Q_NAME,并且在两种情况下都可以获取基本队列。
我需要以编程方式找出此基本队列是本地群集队列还是远程(非本地)群集队列。 我们正在使用C API(MQI)。
我打开基本队列进行查询,并基于此文档:
http://www-01.ibm.com/support/knowledgecenter/#!/SSFKSJ_7.5.0/com.ibm.mq.ref.dev.doc/q101840_.htm (请参阅使用说明-4.)
我只能请求以下属性:-MQCA_Q_DESC,MQCA_Q_NAME,MQIA_DEF_BIND,MQIA_DEF_PERSISTENCE,MQIA_DEF_PRIORITY,MQIA_INHIBIT_PUT,MQIA_Q_TYPE
这可以工作,但是MQIA_Q_TYPE返回群集队列MQQT_CLUSTER(7)。 很好-我知道我可以处理集群队列,但还不够-是本地还是非本地?
检查cmqc.h标头,我可以看到其他一些有趣的属性选择器,但不幸的是无法正常工作。 例如:MQIA_CLUSTER_Q_TYPE,但是在传递选择器向量进行查询时,返回CompCode:2,原因:2067-属性选择器无效。
在PCF文档中,这似乎是可能的:
http://www-01.ibm.com/support/knowledgecenter/#!/SSFKSJ_7.5.0/com.ibm.mq.ref.adm.doc/q087800_.htm (表1,列集群队列)
这是C API的限制吗? 任何解决方法?
干杯,米罗
我知道你想要做什么 ,但为什么你会想这样做,是一个有趣的问题。 我希望您正在从事的是检测和监视,而不是应用程序。 如果业务应用程序需要了解此信息,则几乎可以肯定该设计已损坏。 异步消息传递的整个思想是使发送者与消息的接收者脱钩,因此应用程序需要知道或关心目的地是否为本地。 这就是API无法解决您的问题的原因-对于企业应用程序而言,这样做会破坏异步模型。
也就是说,最简单的方法是使用MQIA_CURRENT_Q_DEPTH
并查询队列深度。 如果队列不是本地队列,则调用将失败。
(删除了先前关于使用PCF进行DIS QL的答案,因为这要简单得多,而且准确率达到100%。)
在60个可查询的队列属性中,为什么您认为“只能请求以下属性:-MQCA_Q_DESC,MQCA_Q_NAME,MQIA_DEF_BIND,MQIA_DEF_PERSISTENCE,MQIA_DEF_PRIORITY,MQIA_INHIBIT_PUT,MQIA_Q_TYPE”? 这是当地商店的标准吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.