MQMDE - Message descriptor extension
The MQMDE structure describes the data that sometimes occurs preceding the application message data. The structure contains those MQMD fields that exist in the version-2 MQMD, but not in the version-1 MQMD.
Availability
All IBM® MQ systems, plus IBM MQ MQI clients connected to these systems.
Format name
MQFMT_MD_EXTENSION
Character set and encoding
Data in MQMDE must be in the character set and encoding of the local queue manager; these are given by the CodedCharSetId queue manager attribute and MQENC_NATIVE for the C programming language.
CodedCharSetId
and Encoding
fields in:- The MQMD (if the MQMDE structure is at the start of the message data), or
- The header structure that precedes the MQMDE structure (all other cases).
If the MQMDE is not in the queue manager's character set and encoding, the MQMDE is accepted but not honored, that is, the MQMDE is treated as message data.
Usage
- Specified on the MQPUT and MQPUT1 calls
- Returned by the MQGET call
- In messages on transmission queues
MQMDE specified on MQPUT and MQPUT1 calls
Format
field in MQMD to MQFMT_MD_EXTENSION to indicate that an
MQMDE is present. If the application does not provide an MQMDE, the queue manager assumes default
values for the fields in the MQMDE. The default values that the queue manager uses are the same as
the initial values for the structure; see Table 2. If the application provides a version-2 MQMD and prefixes the application message data with an MQMDE, the structures are processed as shown in the following table.
MQMD version | Values of version-2 fields | Values of corresponding fields in MQMDE | Action taken by queue manager |
---|---|---|---|
1 | - | Valid | MQMDE is honored |
2 | Default | Valid | MQMDE is honored |
2 | Not default | Valid | MQMDE is treated as message data |
1 or 2 | Any | Not valid | Call fails with an appropriate reason code |
1 or 2 | Any | MQMDE is in the wrong character set or encoding, or is an unsupported version | MQMDE is treated as message data |
Note: On z/OS®, if the application specifies a
version-1 MQMD with an MQMDE, the queue manager validates the MQMDE only if the queue has an
IndexType of MQIT_GROUP_ID. |
There is one special case. If the application uses a version-2 MQMD to put a message that is a segment (that is, the MQMF_SEGMENT or MQMF_LAST_SEGMENT flag is set), and the format name in the MQMD is MQFMT_DEAD_LETTER_HEADER, the queue manager generates an MQMDE structure and inserts it between the MQDLH structure and the data that follows it. In the MQMD that the queue manager retains with the message, the version-2 fields are set to their default values.
Several of the fields that exist in the version-2 MQMD but not the version-1 MQMD are input/output fields on MQPUT and MQPUT1. However, the queue manager does not return any values in the equivalent fields in the MQMDE on output from the MQPUT and MQPUT1 calls; if the application requires those output values, it must use a version-2 MQMD.
MQMDE returned by MQGET call
On the MQGET call, if the application provides a version-1 MQMD, the queue manager prefixes the
message returned with an MQMDE, but only if one or more of the fields in the MQMDE has a nondefault
value. The queue manager sets the Format
field in MQMD to the
value MQFMT_MD_EXTENSION to indicate that an MQMDE is present.
If the application provides an MQMDE at the start of the Buffer parameter, the MQMDE is ignored. On return from the MQGET call, it is replaced by the MQMDE for the message (if one is needed), or overwritten by the application message data (if the MQMDE is not needed).
- The MQMDE was treated as data on the MQPUT or MQPUT1 call (see Table 1 for the circumstances that can cause this).
- The message was received from a remote queue manager connected by a TCP connection, and the receiving message channel agent (MCA) was not set up correctly.
MQMDE in messages on transmission queues
Messages on transmission queues are prefixed with the MQXQH structure, which contains within it a version-1 MQMD. An MQMDE might also be present, positioned between the MQXQH structure and application message data, but it is usually present only if one or more of the fields in the MQMDE has a non-default value.
- MQXQH (containing a version-1 MQMD)
- MQMDE
- MQDLH
- application message data
Fields
Field name and description | Name of constant | Initial value (if any) of constant |
---|---|---|
StrucId (structure identifier) | MQMDE_STRUC_ID | 'MDE¬' |
Version (structure version number) | MQMDE_VERSION_2 | 2 |
StrucLength (length of MQMDE structure) | MQMDE_LENGTH_2 | 72 |
Encoding (numeric encoding of data that follows MQMDE) | MQENC_NATIVE | Depends on environment |
CodedCharSetId (character set identifier of data that follows MQMDE) | MQCCSI_UNDEFINED | 0 |
Format (format name of data that follows MQMDE) | MQFMT_NONE | Blanks |
Flags (general flags) | MQMDEF_NONE | 0 |
GroupId (group identifier) | MQGI_NONE | Nulls |
MsgSeqNumber (sequence number of logical message within group) | None | 1 |
Offset (offset of data in physical message from start of logical message) | None | 0 |
MsgFlags (message flags) | MQMF_NONE | 0 |
OriginalLength (length of original message) | MQOL_UNDEFINED | -1 |
Notes:
|
Language declarations
C declaration for MQMDE
typedef struct tagMQMDE MQMDE;
struct tagMQMDE {
MQCHAR4 StrucId; /* Structure identifier */
MQLONG Version; /* Structure version number */
MQLONG StrucLength; /* Length of MQMDE structure */
MQLONG Encoding; /* Numeric encoding of data that follows
MQMDE */
MQLONG CodedCharSetId; /* Character-set identifier of data that
follows MQMDE */
MQCHAR8 Format; /* Format name of data that follows
MQMDE */
MQLONG Flags; /* General flags */
MQBYTE24 GroupId; /* Group identifier */
MQLONG MsgSeqNumber; /* Sequence number of logical message
within group */
MQLONG Offset; /* Offset of data in physical message from
start of logical message */
MQLONG MsgFlags; /* Message flags */
MQLONG OriginalLength; /* Length of original message */
};
COBOL declaration for MQMDE
** MQMDE structure
10 MQMDE.
** Structure identifier
15 MQMDE-STRUCID PIC X(4).
** Structure version number
15 MQMDE-VERSION PIC S9(9) BINARY.
** Length of MQMDE structure
15 MQMDE-STRUCLENGTH PIC S9(9) BINARY.
** Numeric encoding of data that follows MQMDE
15 MQMDE-ENCODING PIC S9(9) BINARY.
** Character-set identifier of data that follows MQMDE
15 MQMDE-CODEDCHARSETID PIC S9(9) BINARY.
** Format name of data that follows MQMDE
15 MQMDE-FORMAT PIC X(8).
** General flags
15 MQMDE-FLAGS PIC S9(9) BINARY.
** Group identifier
15 MQMDE-GROUPID PIC X(24).
** Sequence number of logical message within group
15 MQMDE-MSGSEQNUMBER PIC S9(9) BINARY.
** Offset of data in physical message from start of logical message
15 MQMDE-OFFSET PIC S9(9) BINARY.
** Message flags
15 MQMDE-MSGFLAGS PIC S9(9) BINARY.
** Length of original message
15 MQMDE-ORIGINALLENGTH PIC S9(9) BINARY.
PL/I declaration for MQMDE
dcl
1 MQMDE based,
3 StrucId char(4), /* Structure identifier */
3 Version fixed bin(31), /* Structure version number */
3 StrucLength fixed bin(31), /* Length of MQMDE structure */
3 Encoding fixed bin(31), /* Numeric encoding of data that
follows MQMDE */
3 CodedCharSetId fixed bin(31), /* Character-set identifier of data
that follows MQMDE */
3 Format char(8), /* Format name of data that follows
MQMDE */
3 Flags fixed bin(31), /* General flags */
3 GroupId char(24), /* Group identifier */
3 MsgSeqNumber fixed bin(31), /* Sequence number of logical message
within group */
3 Offset fixed bin(31), /* Offset of data in physical message
from start of logical message */
3 MsgFlags fixed bin(31), /* Message flags */
3 OriginalLength fixed bin(31); /* Length of original message */
High Level Assembler declaration for MQMDE
MQMDE DSECT
MQMDE_STRUCID DS CL4 Structure identifier
MQMDE_VERSION DS F Structure version number
MQMDE_STRUCLENGTH DS F Length of MQMDE structure
MQMDE_ENCODING DS F Numeric encoding of data that follows
* MQMDE
MQMDE_CODEDCHARSETID DS F Character-set identifier of data that
* follows MQMDE
MQMDE_FORMAT DS CL8 Format name of data that follows MQMDE
MQMDE_FLAGS DS F General flags
MQMDE_GROUPID DS XL24 Group identifier
MQMDE_MSGSEQNUMBER DS F Sequence number of logical message
* within group
MQMDE_OFFSET DS F Offset of data in physical message from
* start of logical message
MQMDE_MSGFLAGS DS F Message flags
MQMDE_ORIGINALLENGTH DS F Length of original message
*
MQMDE_LENGTH EQU *-MQMDE
ORG MQMDE
MQMDE_AREA DS CL(MQMDE_LENGTH)
Visual Basic declaration for MQMDE
Type MQMDE
StrucId As String*4 'Structure identifier'
Version As Long 'Structure version number'
StrucLength As Long 'Length of MQMDE structure'
Encoding As Long 'Numeric encoding of data that follows'
'MQMDE'
CodedCharSetId As Long 'Character-set identifier of data that'
'follows MQMDE'
Format As String*8 'Format name of data that follows MQMDE'
Flags As Long 'General flags'
GroupId As MQBYTE24 'Group identifier'
MsgSeqNumber As Long 'Sequence number of logical message within'
'group'
Offset As Long 'Offset of data in physical message from'
'start of logical message'
MsgFlags As Long 'Message flags'
OriginalLength As Long 'Length of original message'
End Type