MQXQH-传输队列头
格式名
MQFMT_XMIT_Q_HEADER
字符集和编码
MQXQH 中的数据必须是由 MQENC_NATIVE 提供的本地队列管理器的 CodedCharSetId 队列管理器属性和编码提供的字符集。
CodedCharSetId 和 Encoding 字段:- 单独的 MQMD (如果 MQXQH 结构位于消息数据的开头) ,或者
- MQXQH 结构之前的头结构 (所有其他情况)。
字段
| 字段名称和描述 | 常量的名称 | 常量的初始值 (如果有) |
|---|---|---|
| StrucId (结构标识) | MQXQH_STRUC_ID | 'XQH¬' |
| 版本 (结构版本号) | MQXQH_VERSION_1 | 1 |
| RemoteQName (目标队列的名称) | None | 空字符串或空白 |
| RemoteQMgrName(目标队列管理器名称) | None | 空字符串或空白 |
| MsgDesc (原始消息描述符) | 名称和值与 MQMD 相同; 请参阅 表 1 | - |
备注信息:
|
||
语言声明
MQXQH 的 C 声明
typedef struct tagMQXQH MQXQH;
struct tagMQXQH {
MQCHAR4 StrucId; /* Structure identifier */
MQLONG Version; /* Structure version number */
MQCHAR48 RemoteQName; /* Name of destination queue */
MQCHAR48 RemoteQMgrName; /* Name of destination queue manager */
MQMD1 MsgDesc; /* Original message descriptor */
};
MQXQH 的 COBOL 声明
** MQXQH structure
10 MQXQH.
** Structure identifier
15 MQXQH-STRUCID PIC X(4).
** Structure version number
15 MQXQH-VERSION PIC S9(9) BINARY.
** Name of destination queue
15 MQXQH-REMOTEQNAME PIC X(48).
** Name of destination queue manager
15 MQXQH-REMOTEQMGRNAME PIC X(48).
** Original message descriptor
15 MQXQH-MSGDESC.
** Structure identifier
20 MQXQH-MSGDESC-STRUCID PIC X(4).
** Structure version number
20 MQXQH-MSGDESC-VERSION PIC S9(9) BINARY.
** Report options
20 MQXQH-MSGDESC-REPORT PIC S9(9) BINARY.
** Message type
20 MQXQH-MSGDESC-MSGTYPE PIC S9(9) BINARY.
** Expiry time
20 MQXQH-MSGDESC-EXPIRY PIC S9(9) BINARY.
** Feedback or reason code
20 MQXQH-MSGDESC-FEEDBACK PIC S9(9) BINARY.
** Numeric encoding of message data
20 MQXQH-MSGDESC-ENCODING PIC S9(9) BINARY.
** Character set identifier of message data
20 MQXQH-MSGDESC-CODEDCHARSETID PIC S9(9) BINARY.
** Format name of message data
20 MQXQH-MSGDESC-FORMAT PIC X(8).
** Message priority
20 MQXQH-MSGDESC-PRIORITY PIC S9(9) BINARY.
** Message persistence
20 MQXQH-MSGDESC-PERSISTENCE PIC S9(9) BINARY.
** Message identifier
20 MQXQH-MSGDESC-MSGID PIC X(24).
** Correlation identifier
20 MQXQH-MSGDESC-CORRELID PIC X(24).
** Backout counter
20 MQXQH-MSGDESC-BACKOUTCOUNT PIC S9(9) BINARY.
** Name of reply-to queue
20 MQXQH-MSGDESC-REPLYTOQ PIC X(48).
** Name of reply queue manager
20 MQXQH-MSGDESC-REPLYTOQMGR PIC X(48).
** User identifier
20 MQXQH-MSGDESC-USERIDENTIFIER PIC X(12).
** Accounting token
20 MQXQH-MSGDESC-ACCOUNTINGTOKEN PIC X(32).
** Application data relating to identity
20 MQXQH-MSGDESC-APPLIDENTITYDATA PIC X(32).
** Type of application that put the message
20 MQXQH-MSGDESC-PUTAPPLTYPE PIC S9(9) BINARY.
** Name of application that put the message
20 MQXQH-MSGDESC-PUTAPPLNAME PIC X(28).
** Date when message was put
20 MQXQH-MSGDESC-PUTDATE PIC X(8).
** Time when message was put
20 MQXQH-MSGDESC-PUTTIME PIC X(8).
** Application data relating to origin
20 MQXQH-MSGDESC-APPLORIGINDATA PIC X(4).
MQXQH 的 PL/I 声明
dcl
1 MQXQH based,
3 StrucId char(4), /* Structure identifier */
3 Version fixed bin(31), /* Structure version number */
3 RemoteQName char(48), /* Name of destination queue */
3 RemoteQMgrName char(48), /* Name of destination queue
manager */
3 MsgDesc, /* Original message descriptor */
5 StrucId char(4), /* Structure identifier */
5 Version fixed bin(31), /* Structure version number */
5 Report fixed bin(31), /* Report options */
5 MsgType fixed bin(31), /* Message type */
5 Expiry fixed bin(31), /* Expiry time */
5 Feedback fixed bin(31), /* Feedback or reason code */
5 Encoding fixed bin(31), /* Numeric encoding of message
data */
5 CodedCharSetId fixed bin(31), /* Character set identifier of
message data */
5 Format char(8), /* Format name of message data */
5 Priority fixed bin(31), /* Message priority */
5 Persistence fixed bin(31), /* Message persistence */
5 MsgId char(24), /* Message identifier */
5 CorrelId char(24), /* Correlation identifier */
5 BackoutCount fixed bin(31), /* Backout counter */
5 ReplyToQ char(48), /* Name of reply-to queue */
5 ReplyToQMgr char(48), /* Name of reply queue manager */
5 UserIdentifier char(12), /* User identifier */
5 AccountingToken char(32), /* Accounting token */
5 ApplIdentityData char(32), /* Application data relating to
identity */
5 PutApplType fixed bin(31), /* Type of application that put the
message */
5 PutApplName char(28), /* Name of application that put the
message */
5 PutDate char(8), /* Date when message was put */
5 PutTime char(8), /* Time when message was put */
5 ApplOriginData char(4); /* Application data relating to
origin */
MQXQH 的 High Level Assembler 声明
MQXQH DSECT
MQXQH_STRUCID DS CL4 Structure identifier
MQXQH_VERSION DS F Structure version number
MQXQH_REMOTEQNAME DS CL48 Name of destination queue
MQXQH_REMOTEQMGRNAME DS CL48 Name of destination queue
* manager
MQXQH_MSGDESC DS 0F Force fullword alignment
MQXQH_MSGDESC_STRUCID DS CL4 Structure identifier
MQXQH_MSGDESC_VERSION DS F Structure version number
MQXQH_MSGDESC_REPORT DS F Report options
MQXQH_MSGDESC_MSGTYPE DS F Message type
MQXQH_MSGDESC_EXPIRY DS F Expiry time
MQXQH_MSGDESC_FEEDBACK DS F Feedback or reason code
MQXQH_MSGDESC_ENCODING DS F Numeric encoding of message
* data
MQXQH_MSGDESC_CODEDCHARSETID DS F Character set identifier of
* message data
MQXQH_MSGDESC_FORMAT DS CL8 Format name of message data
MQXQH_MSGDESC_PRIORITY DS F Message priority
MQXQH_MSGDESC_PERSISTENCE DS F Message persistence
MQXQH_MSGDESC_MSGID DS XL24 Message identifier
MQXQH_MSGDESC_CORRELID DS XL24 Correlation identifier
MQXQH_MSGDESC_BACKOUTCOUNT DS F Backout counter
MQXQH_MSGDESC_REPLYTOQ DS CL48 Name of reply-to queue
MQXQH_MSGDESC_REPLYTOQMGR DS CL48 Name of reply queue manager
MQXQH_MSGDESC_USERIDENTIFIER DS CL12 User identifier
MQXQH_MSGDESC_ACCOUNTINGTOKEN DS XL32 Accounting token
MQXQH_MSGDESC_APPLIDENTITYDATA DS CL32 Application data relating to
* identity
MQXQH_MSGDESC_PUTAPPLTYPE DS F Type of application that put
* the message
MQXQH_MSGDESC_PUTAPPLNAME DS CL28 Name of application that put
* the message
MQXQH_MSGDESC_PUTDATE DS CL8 Date when message was put
MQXQH_MSGDESC_PUTTIME DS CL8 Time when message was put
MQXQH_MSGDESC_APPLORIGINDATA DS CL4 Application data relating to
* origin
MQXQH_MSGDESC_LENGTH EQU *-MQXQH_MSGDESC
ORG MQXQH_MSGDESC
MQXQH_MSGDESC_AREA DS CL(MQXQH_MSGDESC_LENGTH)
*
MQXQH_LENGTH EQU *-MQXQH
ORG MQXQH
MQXQH_AREA DS CL(MQXQH_LENGTH)
MQXQH 的 Visual Basic 声明
Type MQXQH
StrucId As String*4 'Structure identifier'
Version As Long 'Structure version number'
RemoteQName As String*48 'Name of destination queue'
RemoteQMgrName As String*48 'Name of destination queue manager'
MsgDesc As MQMD1 'Original message descriptor'
End Type
单独消息描述符中的字段
- 一个消息描述符与消息数据分开存储; 这称为 单独的消息描述符,由队列管理器在将消息放入传输队列时生成。 单独的消息描述符中的某些字段是从应用程序在 MQPUT 或 MQPUT1 调用上提供的消息描述符复制的。
单独的消息描述符是从传输队列中除去消息时在 MQGET 调用的 MsgDesc 参数中返回到应用程序的消息描述符。
- 第二个消息描述符作为消息数据的一部分存储在 MQXQH 结构中; 这称为 嵌入式消息描述符,是应用程序在 MQPUT 或 MQPUT1 调用上提供的消息描述符的副本 (带有次要变体)。嵌入式消息描述符始终是 version-1 MQMD。 如果应用程序放入的消息具有 MQMD 中的一个或多个 version-2 字段的非缺省值,那么 MQMDE 结构将跟在 MQXQH 之后,并依次跟有应用程序消息数据 (如果有)。 MQMDE 为:
- 由队列管理器生成 (如果应用程序使用 version-2 MQMD 来放置消息) ,或者
- 在应用程序消息数据开始时已存在 (如果应用程序使用 version-1 MQMD 来放置消息)。
嵌入式消息描述符是从最终目标队列中除去消息时,在 MQGET 调用的 MsgDesc 参数中返回到应用程序的消息描述符。
单独的消息描述符中的字段由队列管理器设置,如下所示。 如果队列管理器不支持 version-2 MQMD ,那么将在不丢失功能的情况下使用 version-1 MQMD。
| 单独 MQMD 中的字段 | 使用的值 |
|---|---|
StrucId |
MQMD_STRUC_ID |
Version |
MQMD_VERSION_2 |
Report |
从嵌入式消息描述符复制,但将 MQRO_ACCEPT_UNSUP_IF_XMIT_MASK 标识的位设置为零。 (这将防止在传输队列上放置消息或从传输队列中除去消息时生成 COA 或 COD 报告消息。) |
MsgType |
已从嵌入式消息描述符复制。 |
Expiry |
已从嵌入式消息描述符复制。 |
Feedback |
已从嵌入式消息描述符复制。 |
Encoding |
MQENC_NATIVE (请参阅注释) |
CodedCharSetId |
队列管理器的 CodedCharSetId 属性。 |
Format |
MQFMT_XMIT_Q_HEADER |
Priority |
已从嵌入式消息描述符复制。 |
Persistence |
已从嵌入式消息描述符复制。 |
MsgId |
队列管理器将生成新值。 此消息标识与队列管理器可能为先前描述的嵌入式消息描述符生成的 MsgId 不同。 |
CorrelId |
来自嵌入式消息描述符的 MsgId 。 对于要放入 SYSTEM.CLUSTER.TRANSMIT.QUEUE, CorrelId 保留供内部使用。 |
BackoutCount |
0 |
ReplyToQ |
已从嵌入式消息描述符复制。 |
ReplyToQMgr |
已从嵌入式消息描述符复制。 |
UserIdentifier |
已从嵌入式消息描述符复制。 |
AccountingToken |
已从嵌入式消息描述符复制。 对于要放入 SYSTEM.CLUSTER.TRANSMIT.QUEUE, AccountingToken 保留供内部使用。 |
ApplIdentityData |
已从嵌入式消息描述符复制。 |
PutApplType |
MQAT_QMGR |
PutApplName |
队列管理器名称的前 28 个字节。 |
PutDate |
将消息放入传输队列的日期。 |
PutTime |
将消息放入传输队列的时间。 |
ApplOriginData |
空白 |
GroupId |
MQGI_NONE |
MsgSeqNumber |
1 |
Offset |
0 |
MsgFlags |
MQMF_NONE |
OriginalLength |
MQOL_UNDEFINED |
- 在 Windows上, Micro Focus COBOL 的 MQENC_NATIVE 的值与 C 的值不同。 在这些环境中,单独的消息描述符中的
Encoding字段中的值始终是 C 的值; 此值为十进制 546。 此外, MQXQH 结构中的整数字段采用对应于此值的编码 (本机 Intel 编码)。
嵌入式消息描述符中的字段
Version字段始终具有值 MQMD_VERSION_1。- 如果
Priority字段的值为 MQPRI_PRIORITY_AS_Q_DEF ,那么它将替换为队列的 DefPriority 属性的值。 - 如果
Persistence字段具有值 MQPER_PERSISTENCE_AS_Q_DEF ,那么它将替换为队列的 DefPersistence 属性的值。 - 如果
MsgId字段具有值 MQMI_NONE ,或者指定了 MQPMO_NEW_MSG_ID 选项,或者消息是分发列表消息,那么MsgId将替换为队列管理器生成的新消息标识。当分发列表消息拆分为放置在不同传输队列上的较小分发列表消息时,每个新的嵌入式消息描述符中的
MsgId字段与原始分发列表消息中的相同。 - 如果指定了 MQPMO_NEW_CORREL_ID 选项,那么
CorrelId将替换为队列管理器生成的新相关标识。 - 上下文字段由 PutMsgOpts 参数中指定的 MQPMO_ * _CONTEXT 选项指示设置; 上下文字段为:
AccountingTokenApplIdentityDataApplOriginDataPutApplNamePutApplTypePutDatePutTimeUserIdentifier
- 如果一个或多个 version-2 字段具有非缺省值,那么 version-2 字段 (如果存在) 将从 MQMD 中移除,并移至 MQMDE 结构中。
将消息放在远程队列上
- 创建包含嵌入式消息描述符的 MQXQH 结构
- 如果需要 MQMDE 并且该 MQMDE 尚不存在,那么追加该 MQMDE
- 附加应用程序消息数据
- 将消息放在相应的传输队列上
将消息直接放在传输队列上
应用程序还可以将消息直接放在传输队列上。 在这种情况下,应用程序必须以 MQXQH 结构作为应用程序消息数据的前缀,并使用相应的值初始化字段。 此外, MQPUT 或 MQPUT1 调用的 MsgDesc 参数中的 Format 字段必须具有值 MQFMT_XMIT_Q_HEADER。
应用程序创建的 MQXQH 结构中的字符数据必须位于本地队列管理器 (由 CodedCharSetId 队列管理器属性定义) 的字符集中,并且整数数据必须采用本机机器编码。 此外, MQXQH 结构中的字符数据必须用空白填充到定义的字段长度; 不得使用空字符过早结束数据,因为队列管理器不会将空字符和后续字符转换为 MQXQH 结构中的空白。
但是,队列管理器不会检查是否存在 MQXQH 结构,或者是否为字段指定了有效值。
应用程序不应将其消息直接放入 SYSTEM.CLUSTER.TRANSMIT.QUEUE。
从传输队列获取消息
从传输队列获取消息的应用程序必须以适当的方式处理 MQXQH 结构中的信息。 MQXQH 结构在应用程序消息数据开头的存在由 MQGET 调用的 MsgDesc 参数的 Format 字段中返回的值 MQFMT_XMIT_Q_HEADER 指示。 在 MsgDesc 参数的 CodedCharSetId 和 Encoding 字段中返回的值指示 MQXQH 结构中的字符和整数数据的字符集和编码。 应用程序消息数据的字符集和编码由嵌入式消息描述符中的 CodedCharSetId 和 Encoding 字段定义。