2012-09-14 66 views
3

在Put MQ API Exit(之前或之後)有什麼方法可以獲取目標隊列的名稱(即調用「put」調用的隊列)。在PUT API中獲取隊列名稱API退出(MQ_PUT_EXIT)

我試着詢問Hobj參數,但得到一個錯誤,說對象沒有用Inquiry選項打開(這是一個有效的可能性)。

我還檢查了ResolvedQName字段pPutMsgOpts參數,但那是空白。

是否有任何其他方法獲取目標隊列名稱?任何想法將不勝感激。

回答

0

在調用PUT1或OPEN的MQXR_AFTER期間可訪問的object descriptor中返回已解析隊列管理器和已解析隊列的名稱。

看一看示例程序`amqsaxe0.c,你會看到下面的函數簽名:

MQ_OPEN_EXIT OpenAfter; 

void MQENTRY OpenAfter (PMQAXP pExitParms 
         , PMQAXC pExitContext 
         , PMQHCONN pHconn 
         , PPMQOD ppObjDesc 
         , PMQLONG pOptions 
         , PPMQHOBJ ppHobj 
         , PMQLONG pCompCode 
         , PMQLONG pReason 
         ) 


MQ_PUT1_EXIT Put1After; 

void MQENTRY Put1After (PMQAXP pExitParms 
         , PMQAXC pExitContext 
         , PMQHCONN pHconn 
         , PPMQOD ppObjDesc 
         , PPMQMD ppMsgDesc 
         , PPMQPMO ppPut1MsgOpts 
         , PMQLONG pBufferLength 
         , PPMQVOID ppBuffer 
         , PMQLONG pCompCode 
         , PMQLONG pReason 
         ) 

的對象描述調用之前有由應用程序指定的對象名稱。後續調用中的相同結構具有在調用期間解決的QMgr和隊列的名稱。由於PUT1執行打開,放置和關閉一步,它必須解析隊列名稱。然而,在單獨打開的情況下,放置(,放置...),關閉調用時,名稱解析僅在打開時出現一次。

請參閱/var/mqm/sampC:\Program Files (x86)\IBM\WebSphere MQ\tools\c\Samples中的樣本,瞭解amqsaxe0.c計劃。

+0

感謝Rob的快速反應。非常感激!但我不確定如何訪問對象描述符。從PUT API出口的方法簽名中,只出現句柄對象(&Hobj)可用,而不是對象描述符。 MQ_PUT_EXIT(&ExitParms,&ExitContext,&Hconn,&Hobj,&pMsgDesc,&pPutMsgOpts,&BufferLength,&pBuffer,&CompCode,&Reason) – TomUrick

+0

我對此短暫迴應表示歉意。我更新了它,希望有更好的解釋。 –

+0

謝謝Rob!這非常有見地。我試圖將退出放在單獨(開放,放置,關閉)呼叫的場景中;並希望將put_exit限制爲單個隊列(在QM下存在的許多隊列中)。默認情況下,似乎在QM下爲所有隊列調用註冊的出口。所以如果我們想把put_exit限制在一個隊列中,我們該怎麼做呢?開放和退出呼叫之間是否存在關聯?我們可以比較對象句柄並期望它們相同嗎? – TomUrick