【问题标题】:IBM MQ 7.5 using C-API to check if local or non-local cluster queueIBM MQ 7.5 使用 C-API 检查本地或非本地集群队列
【发布时间】:2018-07-08 18:07:12
【问题描述】:

我有以下问题(简化):

两个队列管理器 - QM1 和 QM2 - 形成一个集群。

QMgr QM1

  • 别名队列 Q1 和基本队列 Q1.L,这是一个本地集群队列(即在 QM1 上定义)
  • 别名队列 Q2 和基本队列 Q2.L,它是一个非本地集群队列(即在 QM2 上定义)

QMgr QM2

  • 本地集群队列 Q2.L

我可以打开别名队列进行查询,请求 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, Reason:2067 - 属性选择器无效。

在 PCF 文档中这似乎是可能的:

http://www-01.ibm.com/support/knowledgecenter/#!/SSFKSJ_7.5.0/com.ibm.mq.ref.adm.doc/q087800_.htm (表1,列Cluster queue)

这是 C API 的一些限制吗?有什么解决方法吗?

干杯,米罗

【问题讨论】:

    标签: c ibm-mq


    【解决方案1】:

    我知道你想做什么,但是为什么你想这样做是一个有趣的问题。我希望您正在研究的是仪器和监控,而不是应用程序。如果业务应用程序需要知道这些信息,那么设计几乎肯定会被破坏。异步消息传递的整个想法是将发送者与消息的接收者分离,因此应用程序需要知道或关心目的地是否是本地的。这就是 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”?这是当地商店的标准吗?

    【讨论】:

    • 嗨,T. Rob。感谢您的回复!关于您的第一条评论,是的,我们的监控应用程序需要这个,而不是处理“真实”流量的应用程序。我想我们在这里是同步的。剩下的明天。干杯,米罗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多