3

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

我尝试查询Hobj参数,但收到一条错误消息,提示尚未使用查询选项打开对象(这是一种有效的可能性)。

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

还有其他获取目标队列名称的方法吗?任何想法将不胜感激。

4

1 回答 1

0

在调用 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 在一个步骤中执行打开、放置和关闭,因此它必须解析队列名称。但是,在单独的 open、put(, put...)、close 调用的情况下,名称解析仅在 open 期间发生一次。

请参阅程序中/var/mqm/sampC:\Program Files (x86)\IBM\WebSphere MQ\tools\c\Samples程序中的示例amqsaxe0.c

于 2012-09-16T02:40:29.043 回答