在Put MQ API Exit(之前或之后)是否有任何方法可以获取目标队列的名称(即调用“put”调用的队列)。
我尝试查询Hobj
参数,但收到错误,说明没有使用查询选项打开对象(这是一种有效的可能性)。
我还检查了ResolvedQName
参数的pPutMsgOpts
字段,但这是空白的。
是否有其他方法可以获取目标队列名称?任何想法都会非常感激。
答案 0 :(得分:0)
已解析的队列管理器和已解决队列的名称将在object descriptor期间在PUT1或OPEN的MQXR_AFTER
调用期间返回。
查看示例程序`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
)
before调用中的对象描述符具有应用程序指定的对象名称。后调用中的相同结构具有在调用期间解析的QMgr和队列的名称。由于PUT1在一步中执行打开,放置和关闭,因此必须解析队列名称。但是,在单独打开,put(,put ...),close调用的情况下,名称解析仅在打开期间发生一次。
有关/var/mqm/samp
计划,请参阅C:\Program Files (x86)\IBM\WebSphere MQ\tools\c\Samples
或amqsaxe0.c
中的示例。