MQRMH - Reference message header
The MQRMH structure defines the format of a reference message header. This header is used with user-written message channel exits to send extremely large amounts of data (called bulk data ) from one queue manager to another. The difference compared to normal messaging is that the bulk data is not stored on a queue; instead, only a reference to the bulk data is stored on the queue. This reduces the possibility of IBM® MQ resources being exhausted by a small number of extremely large messages.
Availability
- AIX®
- IBM i
- Linux®
- Solaris
- Windows
Format name
MQFMT_REF_MSG_HEADER
Character set and encoding
Character data in MQRMH, and the strings addressed by the offset fields, must be in the character set of the local queue manager; this is given by the CodedCharSetId queue manager attribute. Numeric data in MQRMH must be in the native machine encoding; this is given by the value of MQENC_NATIVE for the C programming language.
CodedCharSetId
and Encoding
fields in:- The MQMD (if the MQRMH structure is at the start of the message data), or
- The header structure that precedes the MQRMH structure (all other cases).
Usage
An application puts a message consisting of an MQRMH, but omitting the bulk data. When a message channel agent (MCA) reads the message from the transmission queue, a user-supplied message exit is invoked to process the reference message header. The exit can append to the reference message the bulk data identified by the MQRMH structure, before the MCA sends the message through the channel to the next queue manager.
At the receiving end, a message exit that waits for reference messages must exist. When a reference message is received, the exit must create the object from the bulk data that follows the MQRMH in the message, and then pass on the reference message without the bulk data. The reference message can later be retrieved by an application reading the reference message (without the bulk data) from a queue.
Normally, the MQRMH structure is all that is in the message. However, if the message is on a transmission queue, one or more additional headers precede the MQRMH structure.
A reference message can also be sent to a distribution list. In this case, the MQDH structure and its related records precede the MQRMH structure when the message is on a transmission queue.
Data conversion
StrucLength
bytes of the start of the
structure are either discarded or have undefined values after data conversion. The bulk data is
converted provided that all the following statements are true:- The bulk data is present in the message when the data conversion is performed.
- The
Format
field in MQRMH has a value other than MQFMT_NONE. - A user-written data-conversion exit exists with the format name specified.
Fields
Field name and description | Name of constant | Initial value (if any) of constant |
---|---|---|
StrucId (structure identifier) | MQRMH_STRUC_ID | 'RMH¬' |
Version (structure version number) | MQRMH_VERSION_1 | 1 |
StrucLength (total length of MQRMH, including strings at end of fixed fields, but not the bulk data) | None | 0 |
Encoding (numeric encoding of bulk data) | MQENC_NATIVE | Depends on environment |
CodedCharSetId (character set identifier of bulk data) | MQCCSI_UNDEFINED | 0 |
Format (format name of bulk data) | MQFMT_NONE | Blanks |
Flags (reference message flags) | MQRMHF_NOT_LAST | 0 |
ObjectType (object type) | None | Blanks |
ObjectInstanceId (object instance identifier) | MQOII_NONE | Nulls |
SrcEnvLength (length of source environment data) | None | 0 |
SrcEnvOffset (offset of source environment data) | None | 0 |
SrcNameLength (length of source object name) | None | 0 |
SrcNameOffset (offset of source object name) | None | 0 |
DestEnvLength (length of destination environment data) | None | 0 |
DestEnvOffset (offset of destination environment data) | None | 0 |
DestNameLength (length of destination object name) | None | 0 |
DestNameOffset (offset of destination object name) | None | 0 |
DataLogicalLength (length of bulk data) | None | 0 |
DataLogicalOffset (low offset of bulk data) | None | 0 |
DataLogicalOffset2 (high offset of bulk data) | None | 0 |
Notes:
|
Language declarations
C declaration for MQRMH
typedef struct tagMQRMH MQRMH;
struct tagMQRMH {
MQCHAR4 StrucId; /* Structure identifier */
MQLONG Version; /* Structure version number */
MQLONG StrucLength; /* Total length of MQRMH, including
strings at end of fixed fields, but
not the bulk data */
MQLONG Encoding; /* Numeric encoding of bulk data */
MQLONG CodedCharSetId; /* Character set identifier of bulk
data */
MQCHAR8 Format; /* Format name of bulk data */
MQLONG Flags; /* Reference message flags */
MQCHAR8 ObjectType; /* Object type */
MQBYTE24 ObjectInstanceId; /* Object instance identifier */
MQLONG SrcEnvLength; /* Length of source environment data */
MQLONG SrcEnvOffset; /* Offset of source environment data */
MQLONG SrcNameLength; /* Length of source object name */
MQLONG SrcNameOffset; /* Offset of source object name */
MQLONG DestEnvLength; /* Length of destination environment
data */
MQLONG DestEnvOffset; /* Offset of destination environment
data */
MQLONG DestNameLength; /* Length of destination object name */
MQLONG DestNameOffset; /* Offset of destination object name */
MQLONG DataLogicalLength; /* Length of bulk data */
MQLONG DataLogicalOffset; /* Low offset of bulk data */
MQLONG DataLogicalOffset2; /* High offset of bulk data */
};
COBOL declaration for MQRMH
** MQRMH structure
10 MQRMH.
** Structure identifier
15 MQRMH-STRUCID PIC X(4).
** Structure version number
15 MQRMH-VERSION PIC S9(9) BINARY.
** Total length of MQRMH, including strings at end of fixed fields,
** but not the bulk data
15 MQRMH-STRUCLENGTH PIC S9(9) BINARY.
** Numeric encoding of bulk data
15 MQRMH-ENCODING PIC S9(9) BINARY.
** Character set identifier of bulk data
15 MQRMH-CODEDCHARSETID PIC S9(9) BINARY.
** Format name of bulk data
15 MQRMH-FORMAT PIC X(8).
** Reference message flags
15 MQRMH-FLAGS PIC S9(9) BINARY.
** Object type
15 MQRMH-OBJECTTYPE PIC X(8).
** Object instance identifier
15 MQRMH-OBJECTINSTANCEID PIC X(24).
** Length of source environment data
15 MQRMH-SRCENVLENGTH PIC S9(9) BINARY.
** Offset of source environment data
15 MQRMH-SRCENVOFFSET PIC S9(9) BINARY.
** Length of source object name
15 MQRMH-SRCNAMELENGTH PIC S9(9) BINARY.
** Offset of source object name
15 MQRMH-SRCNAMEOFFSET PIC S9(9) BINARY.
** Length of destination environment data
15 MQRMH-DESTENVLENGTH PIC S9(9) BINARY.
** Offset of destination environment data
15 MQRMH-DESTENVOFFSET PIC S9(9) BINARY.
** Length of destination object name
15 MQRMH-DESTNAMELENGTH PIC S9(9) BINARY.
** Offset of destination object name
15 MQRMH-DESTNAMEOFFSET PIC S9(9) BINARY.
** Length of bulk data
15 MQRMH-DATALOGICALLENGTH PIC S9(9) BINARY.
** Low offset of bulk data
15 MQRMH-DATALOGICALOFFSET PIC S9(9) BINARY.
** High offset of bulk data
15 MQRMH-DATALOGICALOFFSET2 PIC S9(9) BINARY.
PL/I declaration for MQRMH
dcl
1 MQRMH based,
3 StrucId char(4), /* Structure identifier */
3 Version fixed bin(31), /* Structure version number */
3 StrucLength fixed bin(31), /* Total length of MQRMH,
including strings at end of
fixed fields, but not the bulk
data */
3 Encoding fixed bin(31), /* Numeric encoding of bulk
data */
3 CodedCharSetId fixed bin(31), /* Character set identifier of
bulk data */
3 Format char(8), /* Format name of bulk data */
3 Flags fixed bin(31), /* Reference message flags */
3 ObjectType char(8), /* Object type */
3 ObjectInstanceId char(24), /* Object instance identifier */
3 SrcEnvLength fixed bin(31), /* Length of source environment
data */
3 SrcEnvOffset fixed bin(31), /* Offset of source environment
data */
3 SrcNameLength fixed bin(31), /* Length of source object name */
3 SrcNameOffset fixed bin(31), /* Offset of source object name */
3 DestEnvLength fixed bin(31), /* Length of destination
environment data */
3 DestEnvOffset fixed bin(31), /* Offset of destination
environment data */
3 DestNameLength fixed bin(31), /* Length of destination object
name */
3 DestNameOffset fixed bin(31), /* Offset of destination object
name */
3 DataLogicalLength fixed bin(31), /* Length of bulk data */
3 DataLogicalOffset fixed bin(31), /* Low offset of bulk data */
3 DataLogicalOffset2 fixed bin(31); /* High offset of bulk data */
High Level Assembler declaration for MQRMH
MQRMH DSECT
MQRMH_STRUCID DS CL4 Structure identifier
MQRMH_VERSION DS F Structure version number
MQRMH_STRUCLENGTH DS F Total length of MQRMH, including
* strings at end of fixed fields, but
* not the bulk data
MQRMH_ENCODING DS F Numeric encoding of bulk data
MQRMH_CODEDCHARSETID DS F Character set identifier of bulk
* data
MQRMH_FORMAT DS CL8 Format name of bulk data
MQRMH_FLAGS DS F Reference message flags
MQRMH_OBJECTTYPE DS CL8 Object type
MQRMH_OBJECTINSTANCEID DS XL24 Object instance identifier
MQRMH_SRCENVLENGTH DS F Length of source environment data
MQRMH_SRCENVOFFSET DS F Offset of source environment data
MQRMH_SRCNAMELENGTH DS F Length of source object name
MQRMH_SRCNAMEOFFSET DS F Offset of source object name
MQRMH_DESTENVLENGTH DS F Length of destination environment
* data
MQRMH_DESTENVOFFSET DS F Offset of destination environment
* data
MQRMH_DESTNAMELENGTH DS F Length of destination object name
MQRMH_DESTNAMEOFFSET DS F Offset of destination object name
MQRMH_DATALOGICALLENGTH DS F Length of bulk data
MQRMH_DATALOGICALOFFSET DS F Low offset of bulk data
MQRMH_DATALOGICALOFFSET2 DS F High offset of bulk data
*
MQRMH_LENGTH EQU *-MQRMH
ORG MQRMH
MQRMH_AREA DS CL(MQRMH_LENGTH)
Visual Basic declaration for MQRMH
Type MQRMH
StrucId As String*4 'Structure identifier'
Version As Long 'Structure version number'
StrucLength As Long 'Total length of MQRMH, including'
'strings at end of fixed fields, but'
'not the bulk data'
Encoding As Long 'Numeric encoding of bulk data'
CodedCharSetId As Long 'Character set identifier of bulk data'
Format As String*8 'Format name of bulk data'
Flags As Long 'Reference message flags'
ObjectType As String*8 'Object type'
ObjectInstanceId As MQBYTE24 'Object instance identifier'
SrcEnvLength As Long 'Length of source environment data'
SrcEnvOffset As Long 'Offset of source environment data'
SrcNameLength As Long 'Length of source object name'
SrcNameOffset As Long 'Offset of source object name'
DestEnvLength As Long 'Length of destination environment'
'data'
DestEnvOffset As Long 'Offset of destination environment'
'data'
DestNameLength As Long 'Length of destination object name'
DestNameOffset As Long 'Offset of destination object name'
DataLogicalLength As Long 'Length of bulk data'
DataLogicalOffset As Long 'Low offset of bulk data'
DataLogicalOffset2 As Long 'High offset of bulk data'
End Type