MQXQH-传输队列头

MQXQH 结构描述了在消息位于传输队列上时以消息的应用程序消息数据为前缀的信息。 传输队列是一种特殊类型的本地队列,它临时保存发往远程队列 (即,发往不属于本地队列管理器的队列) 的消息。 传输队列由值为 MQUS_TRANSMISSION 的 Usage 队列属性表示。

格式名

MQFMT_XMIT_Q_HEADER

字符集和编码

MQXQH 中的数据必须是由 MQENC_NATIVE 提供的本地队列管理器的 CodedCharSetId 队列管理器属性和编码提供的字符集。

将 MQXQH 的字符集和编码设置为 CodedCharSetIdEncoding 字段:
  • 单独的 MQMD (如果 MQXQH 结构位于消息数据的开头) ,或者
  • MQXQH 结构之前的头结构 (所有其他情况)。

字段

注: 在下表中,字段按用法 (而不是按字母顺序) 进行分组。 子主题遵循相同的顺序。
表 1. MQXQH 的 MQXQH 中的字段
字段名称和描述 常量的名称 常量的初始值 (如果有)
StrucId (结构标识) MQXQH_STRUC_ID 'XQH¬'
版本 (结构版本号) MQXQH_VERSION_1 1
RemoteQName (目标队列的名称) None 空字符串或空白
RemoteQMgrName(目标队列管理器名称) None 空字符串或空白
MsgDesc (原始消息描述符) 名称和值与 MQMD 相同; 请参阅 表 1 -
备注信息:
  1. 符号 ¬ 表示单个空白字符。
  2. 值 Null 字符串或空白表示 C 中的空字符串,而空白字符表示其他编程语言中的空字符。
  3. 在 C 编程语言中,宏变量 MQXQH_DEFAULT 包含表中列出的值。 通过以下方式使用它来为结构中的字段提供初始值:
    MQXQH MyXQH = {MQXQH_DEFAULT};
    

语言声明

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。

表 2. 用于单独 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 编码)。

嵌入式消息描述符中的字段

嵌入式消息描述符中的字段与 MQPUT 或 MQPUT1 调用的 MsgDesc 参数中的字段具有相同的值,但以下值除外:
  • 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 选项指示设置; 上下文字段为:
    • AccountingToken
    • ApplIdentityData
    • ApplOriginData
    • PutApplName
    • PutApplType
    • PutDate
    • PutTime
    • UserIdentifier
  • 如果一个或多个 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 参数的 CodedCharSetIdEncoding 字段中返回的值指示 MQXQH 结构中的字符和整数数据的字符集和编码。 应用程序消息数据的字符集和编码由嵌入式消息描述符中的 CodedCharSetIdEncoding 字段定义。