簡體   English   中英

使用C-API的IBM MQ 7.5檢查本地還是非本地集群隊列

[英]IBM MQ 7.5 using C-API to check if local or non-local cluster queue

我有以下問題(簡化):

兩個隊列管理器-QM1和QM2-組成一個集群。

QMgr QM1

  • 具有基本隊列Q1.L的別名隊列Q1,它是本地群集隊列(即在QM1上定義)
  • 具有基本隊列Q2.L的別名隊列Q2,它是一個非本地群集隊列(即,在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,原因: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM