在PUT API Exit(MQ_PUT_EXIT)中获取队列名称

时间:2012-09-14 10:50:51

标签: api exit ibm-mq

在Put MQ API Exit(之前或之后)是否有任何方法可以获取目标队列的名称(即调用“put”调用的队列)。

我尝试查询Hobj参数,但收到错误,说明没有使用查询选项打开对象(这是一种有效的可能性)。

我还检查了ResolvedQName参数的pPutMsgOpts字段,但这是空白的。

是否有其他方法可以获取目标队列名称?任何想法都会非常感激。

1 个答案:

答案 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\Samplesamqsaxe0.c中的示例。