MQPSXP-发布出口数据结构

MQPSXP 结构描述传递到发布出口并从发布出口返回的信息。

表 1 汇总了结构中的字段:
表 1. MQPSXP 中的字段
字段 描述
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_STRUCID
MQPSXP_STRUCID 是发布出口参数结构的标识。 对于 C 编程语言,还定义了常量 MQPSXP_STRUC_ID_ARRAY ; 它具有与 MQPSXP_STRUC_ID相同的值,但是字符数组而不是字符串。

StrucID 是出口的输入字段。

Version (MQLONG)
Version 是结构版本号。 值如下所示:
MQPSXP_VERSION_1
MQPSXP_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的任何值。
如果 ExitReason 具有值 MQXR_PUBLICATION,那么 MQSBC 结构的 DestinationQNameDestinationQMgrName 字段将标识将消息发送到的目标。
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
队列管理器根据消息描述符的 Report 字段中的 MQRO_DISCARD_MSG 选项继续处理该消息。
  • 如果指定了 MQRO_DISCARD_MSG 选项,那么不会将消息传递给订户。
  • 如果未指定 MQRO_DISCARD_MSG 选项,那么会将消息放在死信队列上。 如果没有死信队列,或者无法将消息成功放在死信队列上,那么不会将发布内容传递给订户。 将发布内容传递到其他订户取决于 PMSGDLVNPMSGDLV 主题对象属性的值。 有关这些属性的说明,请参阅 DEFINE TOPIC 命令的参数描述。

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 是可供出口使用的字段。 每个连接都具有单独的 ExitUserAreaExitUserArea 的长度由 MQ_EXIT_USER_AREA_LENGTH给出。
ExitReason 字段在第一次调用出口时具有值 MQXR_INIT 。 在第一次调用连接的出口时,会将 ExitUserArea 初始化为 MQXUA_NONE 。 在出口的调用中保留对 ExitUserArea 的后续更改。

ExitUserArea 是出口的输入/输出字段。

ExitData (MQCHAR32)
ExitData 是由队列管理器初始化文件中节的 PublishExitData 参数定义的固定出口数据。 用空白填充数据到字段的完整长度。 如果在初始化文件中未定义固定出口数据,那么 ExitData 为空白。 ExitData 的长度由 MQ_EXIT_DATA_LENGTH给出。

ExitData 是出口的输入字段。

QMgrName (MQCHAR48)
QMgrName 是本地队列管理器的名称。 该名称将用空格填充到字段的完整长度。 此字段的长度由 MQ_Q_MGR_NAME_LENGTH给出。

QMgrName 是出口的输入字段。

Hconn (MQHCONN)
Hconn 是表示与队列管理器的连接的句柄。 仅将 Hconn 用作 MQSETMPMQINQMMPMQDLTMP 消息属性函数调用的参数,以使用消息属性。

Hconn 是出口的输入字段。

MsgDescPtr (PMQMD)
MsgDescPtr 是正在处理的消息的消息描述符 ( MQMD) 的地址,并且是从 MQPUT 调用返回的 MQMD 的副本。 出口可以更改消息描述符的内容。 必须小心地完成对消息描述符内容的任何更改。 特别是,在 MQSBC 结构的 SubType 字段值为 MQSUBTYPE_PROXY的情况下,不得更改消息描述符中的 CorrelId 字段。

如果 ExitReasonMQXR_INITMQXR_TERM ,那么不会将任何消息描述符传递到出口; 在这些情况下, MsgDescPtr 是空指针。

MsgDescPtr 是出口的输入字段。

MsgHandle (MQHMSG)
MsgHandle 是消息属性的句柄。 仅将 MsgHandleMQSETMPMQINQMMPMQDLTMP 消息属性函数调用配合使用以使用消息属性。

MsgHandle 是出口的输入字段。

MsgInPtr (PMQVOID)
MsgInPtr 是输入消息数据的地址。 MsgInPtr 寻址的缓冲区内容可由出口修改; 请参阅 MsgOutPtr

MsgInPtr 是出口的输入字段。

MsgInLength (MQLONG)
MsgInLength 是传递到出口的消息数据的长度 (以字节计)。 数据的地址由 MsgInPtr提供。

MsgInLength 是出口的输入字段。

MsgOutPtr (PMQVOID)
MsgOutPtr 是包含从出口返回的消息数据的缓冲区的地址。 进入出口时, MsgOutPtr 为空。 从出口返回时,如果该值仍然为空,那么队列管理器将发送由 MsgInPtr指定的消息,其长度由 MsgInLength指定。
如果出口修改消息数据,请使用下列其中一个过程:
  • 如果数据长度未更改,那么可以在 MsgInPtr寻址的缓冲区中修改数据。 在这种情况下,请勿更改 MsgOutPtrMsgOutLength
  • 如果修改后的数据比原始数据短,那么可以在 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;