MQPSXP-发布出口数据结构
MQPSXP 结构描述传递到发布出口并从发布出口返回的信息。
表 1 汇总了结构中的字段:
| 字段 | 描述 |
|---|---|
StrucID |
结构标识 |
Version |
结构版本号 |
ExitId |
正在调用的出口的类型 |
ExitReason |
调用出口的原因 |
ExitResponse |
来自出口的响应 |
ExitResponse2 |
来自出口的辅助响应 |
Feedback |
反馈代码 |
ExitUserArea |
出口用户区域 |
ExitData |
出口数据 |
QMgrName |
本地队列管理器的名称 |
Hconn |
连接句柄 |
MsgDescPtr |
消息描述符 (MQMD) 的地址 |
MsgHandle |
消息属性的句柄 (MQHMSG) |
MsgInPtr |
输入消息的地址 |
MsgInLength |
输入消息的长度 |
MsgOutPtr |
输出消息的地址 |
MsgOutLength |
输出消息的长度 |
pEntryPoints |
MQIEP 结构的地址 |
字段
StrucID(MQCHAR4)StrucID是结构标识。 值如下所示:MQPSXP_STRUCIDMQPSXP_STRUCID是发布出口参数结构的标识。 对于 C 编程语言,还定义了常量MQPSXP_STRUC_ID_ARRAY; 它具有与MQPSXP_STRUC_ID相同的值,但是字符数组而不是字符串。
StrucID是出口的输入字段。Version(MQLONG)Version是结构版本号。 值如下所示:MQPSXP_VERSION_1MQPSXP_VERSION_1是 V 1 发布出口参数结构。 常量MQPSXP_CURRENT_VERSION也使用相同的值进行定义。
Version是出口的输入字段。ExitId(MQLONG)ExitId是正在调用的出口类型。 值如下所示:MQXT_PUBLISH_EXIT- 发布出口。
ExitId是出口的输入字段。ExitReason(MQLONG)ExitReason是调用出口的原因。 可能的值为:MQXR_INIT- 将调用此连接的出口以进行初始化。 出口可能获取并初始化它需要的资源; 例如,主存储器。
MQXR_TERM- 将调用此连接的出口,因为该出口即将停止。 出口必须释放自初始化以来获取的任何资源; 例如,主存储器。
MQXR_PUBLICATION- 在将发布内容放入订户的消息队列之前,队列管理器将调用该出口。 出口可以更改消息,不将消息放入队列或停止发布。
ExitReason是出口的输入字段。ExitResponse(MQLONG)- 在出口中设置
ExitResponse以指定处理必须如何继续。ExitResponse是下列其中一个值:MQXCC_OK- 设置
MQXCC_OK以继续正常处理。 设置MQXCC_OK以响应ExitReason的任何值。 MQXCC_FAILED- 设置
MQXCC_FAILED以停止发布操作。 完成代码MQCC_FAILED和原因码 2557 (09FD) (RC2557) :MQRC_PUBLISH_EXIT_ERROR 设置为从出口返回。 MQXCC_SUPPRESS_FUNCTION- 设置
MQXCC_SUPPRESS_FUNCTION以停止消息的正常处理。 仅当ExitReason具有值MQXR_PUBLICATION时,才设置MQXCC_SUPPRESS_FUNCTION。
ExitResponse是出口的输出字段。 ExitResponse2(MQLONG)ExitResponse2保留供将来使用。Feedback(MQLONG)Feedback是在出口返回ExitResponse中的MQXCC_SUPPRESS_FUNCTION时要使用的反馈代码。在输入到出口时,
Feedback始终具有值MQFB_NONE。 如果出口返回MQXCC_SUPPRESS_FUNCTION,请将Feedback设置为当队列管理器将其放入死信队列时用于消息的值。 从出口返回时,如果Feedback具有原始值MQFB_NONE,那么队列管理器会将Feedback设置为MQFB_STOPPED_BY_PUBSUB_EXIT。Feedback是出口的输入/输出字段。ExitUserArea(MQBYTE16)ExitUserArea是可供出口使用的字段。 每个连接都具有单独的ExitUserArea。ExitUserArea的长度由MQ_EXIT_USER_AREA_LENGTH给出。ExitData(MQCHAR32)ExitData是由队列管理器初始化文件中节的 PublishExitData 参数定义的固定出口数据。 用空白填充数据到字段的完整长度。 如果在初始化文件中未定义固定出口数据,那么ExitData为空白。ExitData的长度由MQ_EXIT_DATA_LENGTH给出。ExitData是出口的输入字段。QMgrName(MQCHAR48)QMgrName是本地队列管理器的名称。 该名称将用空格填充到字段的完整长度。 此字段的长度由MQ_Q_MGR_NAME_LENGTH给出。QMgrName是出口的输入字段。Hconn(MQHCONN)Hconn是表示与队列管理器的连接的句柄。 仅将Hconn用作 MQSETMP, MQINQMMP或 MQDLTMP 消息属性函数调用的参数,以使用消息属性。Hconn是出口的输入字段。MsgDescPtr(PMQMD)MsgDescPtr是正在处理的消息的消息描述符 (MQMD) 的地址,并且是从 MQPUT 调用返回的 MQMD 的副本。 出口可以更改消息描述符的内容。 必须小心地完成对消息描述符内容的任何更改。 特别是,在MQSBC结构的SubType字段值为MQSUBTYPE_PROXY的情况下,不得更改消息描述符中的CorrelId字段。如果
ExitReason为MQXR_INIT或MQXR_TERM,那么不会将任何消息描述符传递到出口; 在这些情况下,MsgDescPtr是空指针。MsgDescPtr是出口的输入字段。MsgHandle(MQHMSG)MsgHandle是消息属性的句柄。 仅将MsgHandle与 MQSETMP, MQINQMMP或 MQDLTMP 消息属性函数调用配合使用以使用消息属性。MsgHandle是出口的输入字段。MsgInPtr(PMQVOID)MsgInPtr是输入消息数据的地址。MsgInPtr寻址的缓冲区内容可由出口修改; 请参阅MsgOutPtr。MsgInPtr是出口的输入字段。MsgInLength(MQLONG)MsgInLength是传递到出口的消息数据的长度 (以字节计)。 数据的地址由MsgInPtr提供。MsgInLength是出口的输入字段。MsgOutPtr(PMQVOID)MsgOutPtr是包含从出口返回的消息数据的缓冲区的地址。 进入出口时,MsgOutPtr为空。 从出口返回时,如果该值仍然为空,那么队列管理器将发送由MsgInPtr指定的消息,其长度由MsgInLength指定。如果出口修改消息数据,请使用下列其中一个过程:- 如果数据长度未更改,那么可以在
MsgInPtr寻址的缓冲区中修改数据。 在这种情况下,请勿更改MsgOutPtr和MsgOutLength。 - 如果修改后的数据比原始数据短,那么可以在
MsgInPtr寻址的缓冲区中修改数据。 在这种情况下,必须将MsgOutPtr设置为输入消息缓冲区的地址,并将MsgOutLength设置为消息数据的新长度。 - 如果修改后的数据比原始数据长,或者可能比原始数据长,那么出口必须获取新的消息缓冲区。 将修改后的数据复制到其中。 将
MsgOutPtr设置为新缓冲区的地址,并将MsgOutLength设置为新消息数据的长度。 当下次调用出口时,该出口负责释放MsgOutPtr寻址的缓冲区。
注:MsgOutPtr始终是输入到出口的空指针,而不是先前获取的消息缓冲区的地址。 要释放先前获取的缓冲区,出口必须保存其地址和长度。 将信息保存在ExitUserArea中,或保存在将其地址保存在ExitUserArea中的控制块中。MsgOutPtr是出口的输入/输出字段。- 如果数据长度未更改,那么可以在
MsgOutLength(MQLONG)MsgOutLength是出口返回的消息数据的长度 (以字节计)。 在出口的输入上,此字段始终为零。 从出口返回时,如果MsgOutPtr为空,那么将忽略此字段。 有关修改消息数据的信息,请参阅MsgOutPtr。MsgOutLength是出口的输入/输出字段。pEntryPoints(PMQIEP)pEntryPoints是 MQIEP 结构的地址,可通过该结构进行 MQI 和 DCI 调用。
C 语言声明-MQPSXP
typedef struct tagMQPSXP {
MQCHAR4 StrucId; /* Structure identifier */
MQLONG Version; /* Structure version number */
MQLONG ExitId; /* Type of exit */
MQLONG ExitReason; /* Reason for invoking exit */
MQLONG ExitResponse; /* Response from exit */
MQLONG ExitResponse2; /* Reserved */
MQLONG Feedback; /* Feedback code */
MQBYTE16 ExitUserArea; /* Exit user area */
MQCHAR32 ExitData; /* Exit data */
MQCHAR48 QMgrName; /* Name of local queue manager */
MQHCONN Hconn; /* Connection handle */
MQHMSG MsgHandle; /* Handle to message properties */
PMQMD MsgDescPtr; /* Address of message descriptor */
PMQVOID MsgInPtr; /* Address of input message data */
MQLONG MsgInLength; /* Length of input message data */
PMQVOID MsgOutPtr; /* Address of output message data */
MQLONG MsgOutLength; /* Length of output message data */
/* Ver:1 */
PMQIEP pEntryPoints; /* Address of the MQIEP structure */
/* Ver:2 */
} MQPSXP;