MQMD - Descriptor de mensaje

La estructura MQMD contiene la información de control que acompaña a los datos de aplicación cuando un mensaje viaja entre las aplicaciones de envío y recepción. La estructura es un parámetro de entrada/salida en las llamadas MQGET, MQPUT y MQPUT1 .

Disponibilidad

Todos los sistemas IBM® MQ , más IBM MQ MQI clients conectados a estos sistemas.

Versión

La versión actual de MQMD es MQMD_VERSION_2. Las aplicaciones que están pensadas para ser portables entre varios entornos deben asegurarse de que la versión necesaria de MQMD esté soportada en todos los entornos afectados. Los campos que existen sólo en las versiones más recientes de la estructura se identifican como tales en las descripciones siguientes.

Los archivos de cabecera, COPY e INCLUDE proporcionados para los lenguajes de programación soportados contienen la versión más reciente de MQMD soportada por el entorno, pero con el valor inicial del campo Version establecido en MQMD_VERSION_1. Para utilizar campos que no están presentes en la estructura version-1 , la aplicación debe establecer el campo Version en el número de versión de la versión necesaria.

Hay disponible una declaración para la estructura version-1 con el nombre MQMD1.

Juego de caracteres y codificación

Los datos de MQMD deben estar en el juego de caracteres y la codificación del gestor de colas local; los proporciona el atributo de gestor de colas CodedCharSetId y MQENC_NATIVE. Sin embargo, si la aplicación se ejecuta como un IBM MQ MQI client, la estructura debe estar en el juego de caracteres y la codificación del cliente.

Si los gestores de colas emisores y receptores utilizan conjuntos de caracteres o codificaciones diferentes, los datos de MQMD se convierten automáticamente. No es necesario que la aplicación convierta MQMD.

Utilización de distintas versiones de MQMD

Un MQMD de version-2 es equivalente a utilizar un MQMD de version-1 y prefijar los datos del mensaje con una estructura MQMDE. Sin embargo, si todos los campos de la estructura MQMDE tienen sus valores predeterminados, se puede omitir MQMDE. Un MQMD version-1 más MQMDE se utilizan tal como se describe:
  • En las llamadas MQPUT y MQPUT1 , si la aplicación proporciona un MQMD de version-1 , la aplicación puede opcionalmente añadir un prefijo a los datos de mensaje con un MQMDE, estableciendo el campo Format de MQMD en MQFMT_MD_EXTENSION para indicar que hay un MQMDE presente. Si la aplicación no proporciona un MQMDE, el gestor de colas asume los valores predeterminados para los campos de MQMDE.
    Nota: Varios de los campos que existen en el MQMD version-2 pero no en el MQMD version-1 son campos de entrada/salida en las llamadas MQPUT y MQPUT1 . Sin embargo, el gestor de colas no devuelve ningún valor en los campos equivalentes de MQMDE en la salida de las llamadas MQPUT y MQPUT1 ; si la aplicación requiere estos valores de salida, debe utilizar un MQMD version-2 .
  • En la llamada MQGET, si la aplicación proporciona un MQMD version-1 , el gestor de colas prefija el mensaje devuelto con un MQMDE, pero sólo si uno o varios de los campos de MQMDE tienen un valor no predeterminado. El campo Format de MQMD tendrá el valor MQFMT_MD_EXTENSION para indicar que hay un MQMDE presente.
Los valores predeterminados que utiliza el gestor de colas para los campos del MQMDE son los mismos que los valores iniciales de dichos campos, que se muestran en la Tabla 2.

Cuando un mensaje se encuentra en una cola de transmisión, algunos de los campos de MQMD se establecen en valores concretos; consulte MQXQH - Encabezado de la cola de transmisión para obtener más detalles.

Contexto de mensaje

Determinados campos de MQMD contienen el contexto del mensaje. Hay dos tipos de contexto de mensaje: contexto de identidad y contexto de origen. Por norma, se utiliza para:
  • El contexto de identidad está relacionado con la aplicación que originalmente colocó el mensaje
  • El contexto de origen está relacionado con la aplicación que más recientemente ha colocado el mensaje.
Estas dos aplicaciones pueden ser la misma aplicación, pero también pueden ser aplicaciones diferentes (por ejemplo, cuando se reenvía un mensaje de una aplicación a otra).

Aunque la identidad y el contexto de origen normalmente tienen los significados descritos, el contenido de ambos tipos de campos de contexto en MQMD depende de las opciones MQPMO_ * _CONTEXT que se especifican cuando se coloca el mensaje. Como resultado, el contexto de identidad no está necesariamente relacionado con la aplicación que colocó originalmente el mensaje, y el contexto de origen no está necesariamente relacionado con la aplicación que colocó el mensaje más recientemente; depende del diseño de la suite de aplicaciones.

El agente de canal de mensajes (MCA) nunca altera el contexto del mensaje. Los MCA que reciben mensajes de gestores de colas remotos utilizan la opción de contexto MQPMO_SET_ALL_CONTEXT en la llamada MQPUT o MQPUT1 . Esto permite al MCA receptor conservar exactamente el contexto de mensaje que ha viajado con el mensaje del MCA emisor. Sin embargo, el resultado es que el contexto de origen no está relacionado con ninguno de los MCA que han enviado y recibido el mensaje. El contexto de origen hace referencia a una aplicación anterior que ha colocado el mensaje. Si todas las aplicaciones intermedias han pasado el contexto de mensaje, el contexto de origen hace referencia a la propia aplicación de origen.

En las descripciones, los campos de contexto se describen como si se utilizaran como se ha descrito anteriormente. Para obtener más información sobre el contexto de mensaje, consulte Contexto de mensaje.

Campos

Nota: En la siguiente tabla, los campos están agrupados por uso y no alfabéticamente. Los temas infantiles siguen la misma secuencia.
Tabla 1. Campos en MQMD para MQMD
Nombre de campo y descripción Nombre de constante Valor inicial (si existe) de constante
StrucId (identificador de estructura) MQMD_STRUC_ID 'MD'
Versión (número de versión de estructura) MQMD_VERSION_1 1
Informe (opciones para mensajes de informe) MQRO_NONE 0
MsgType (tipo de mensaje) MQMT_DATAGRAM 8
MQMD-Campo de caducidad (duración del mensaje) MQEI_UNLIMITED -1
MQMD - Campo de comentarios (comentarios o código de motivo) MQFB_NONE 0
Codificación (codificación numérica de datos de mensaje) MQENC_NATIVE Depende del entorno
CodedCharSetId (identificador del conjunto de caracteres de los datos del mensaje) MQCCSI_Q_MGR 0
Formato (nombre de formato de datos de mensaje) MQFMT_NONE Espacios en blanco
Prioridad (prioridad de mensaje) MQPRI_PRIORITY_AS_Q_DEF -1
Persistence (persistencia de mensaje) MQPER_PERSISTENCE_AS_Q_DEF 2
MQMD-Campo MsgId (identificador de mensaje) MQMI_NONE Nulos
CorrelId (identificador de correlación) MQCI_NONE Nulos
BackoutCount (contador de restituciones) Ninguna 0
ReplyToQ (nombre de la cola de respuesta) Ninguna Serie nula o espacios en blanco
ReplyToQMgr (nombre del gestor de colas de respuesta) Ninguna Serie nula o espacios en blanco
UserIdentifier (identificador de usuario) Ninguna Serie nula o espacios en blanco
AccountingToken (señal de contabilidad) MQACT_NONE Nulos
ApplIdentityData (datos de la aplicación relativos a la identidad) Ninguna Serie nula o espacios en blanco
PutApplType (tipo de aplicación que puso el mensaje) MQAT_SIN_CONTEXTO 0
PutApplName (nombre de la aplicación que envió el mensaje) Ninguna Serie nula o espacios en blanco
PutDate (fecha en la que se colocó el mensaje) Ninguna Serie nula o espacios en blanco
PutTime (hora a la que se colocó el mensaje) Ninguna Serie nula o espacios en blanco
ApplOriginData (datos de la aplicación relativos al origen) Ninguna Serie nula o espacios en blanco
Nota: Los campos restantes se ignoran si Version es menor que MQMD_VERSION_2.
GroupId (identificador de grupo) MQGI_NONE Nulos
MsgSeqNumber (número de secuencia del mensaje lógico dentro del grupo) Ninguna 1
Desplazamiento (desplazamiento de datos en el mensaje físico desde el inicio del mensaje lógico) Ninguna 0
MQMD - Campo « MsgFlags » (indicadores de mensajes) MQMF_NINGUNO 0
OriginalLength (longitud del mensaje original) MQOL_INDETERMINADO -1
Notas:
  1. El valor Serie nula o espacios en blanco indica la serie nula en C y los caracteres en blanco en otros lenguajes de programación.
  2. En el lenguaje de programación C, la variable de macro MQMD_DEFAULT contiene los valores que se listan en la tabla. Se puede utilizar de la forma siguiente para proporcionar valores iniciales para los campos de la estructura:
    MQMD MyMD = {MQMD_DEFAULT};
    

Declaraciones lingüísticas

Declaración C para MQMD

typedef struct tagMQMD MQMD;
struct tagMQMD {
  MQCHAR4   StrucId;           /* Structure identifier */
  MQLONG    Version;           /* Structure version number */
  MQLONG    Report;            /* Options for report messages */
  MQLONG    MsgType;           /* Message type */
  MQLONG    Expiry;            /* Message lifetime */
  MQLONG    Feedback;          /* Feedback or reason code */
  MQLONG    Encoding;          /* Numeric encoding of message data */
  MQLONG    CodedCharSetId;    /* Character set identifier of message
                                  data */
  MQCHAR8   Format;            /* Format name of message data */
  MQLONG    Priority;          /* Message priority */
  MQLONG    Persistence;       /* Message persistence */
  MQBYTE24  MsgId;             /* Message identifier */
  MQBYTE24  CorrelId;          /* Correlation identifier */
  MQLONG    BackoutCount;      /* Backout counter */
  MQCHAR48  ReplyToQ;          /* Name of reply queue */
  MQCHAR48  ReplyToQMgr;       /* Name of reply queue manager */
  MQCHAR12  UserIdentifier;    /* User identifier */
  MQBYTE32  AccountingToken;   /* Accounting token */
  MQCHAR32  ApplIdentityData;  /* Application data relating to
                                  identity */
  MQLONG    PutApplType;       /* Type of application that put the
                                  message */
  MQCHAR28  PutApplName;       /* Name of application that put the
                                  message */
  MQCHAR8   PutDate;           /* Date when message was put */
  MQCHAR8   PutTime;           /* Time when message was put */
  MQCHAR4   ApplOriginData;    /* Application data relating to origin */
  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 declaración para MQMD

**   MQMD structure
  10 MQMD.
**    Structure identifier
   15 MQMD-STRUCID          PIC X(4).
**    Structure version number
   15 MQMD-VERSION          PIC S9(9) BINARY.
**    Options for report messages
   15 MQMD-REPORT           PIC S9(9) BINARY.
**    Message type
   15 MQMD-MSGTYPE          PIC S9(9) BINARY.
**    Message lifetime
   15 MQMD-EXPIRY           PIC S9(9) BINARY.
**    Feedback or reason code
   15 MQMD-FEEDBACK         PIC S9(9) BINARY.
**    Numeric encoding of message data
   15 MQMD-ENCODING         PIC S9(9) BINARY.
**    Character set identifier of message data
   15 MQMD-CODEDCHARSETID   PIC S9(9) BINARY.
**    Format name of message data
   15 MQMD-FORMAT           PIC X(8).
**    Message priority
   15 MQMD-PRIORITY         PIC S9(9) BINARY.
**    Message persistence
   15 MQMD-PERSISTENCE      PIC S9(9) BINARY.
**    Message identifier
   15 MQMD-MSGID            PIC X(24).
**    Correlation identifier
   15 MQMD-CORRELID         PIC X(24).
**    Backout counter
   15 MQMD-BACKOUTCOUNT     PIC S9(9) BINARY.
**    Name of reply queue
   15 MQMD-REPLYTOQ         PIC X(48).
**    Name of reply queue manager
   15 MQMD-REPLYTOQMGR      PIC X(48).
**    User identifier
   15 MQMD-USERIDENTIFIER   PIC X(12).
**    Accounting token
   15 MQMD-ACCOUNTINGTOKEN  PIC X(32).
**    Application data relating to identity
   15 MQMD-APPLIDENTITYDATA PIC X(32).
**    Type of application that put the message
   15 MQMD-PUTAPPLTYPE      PIC S9(9) BINARY.
**    Name of application that put the message
   15 MQMD-PUTAPPLNAME      PIC X(28).
**    Date when message was put
   15 MQMD-PUTDATE          PIC X(8).
**    Time when message was put
   15 MQMD-PUTTIME          PIC X(8).
**    Application data relating to origin
   15 MQMD-APPLORIGINDATA   PIC X(4).
**    Group identifier
   15 MQMD-GROUPID          PIC X(24).
**    Sequence number of logical message within group
   15 MQMD-MSGSEQNUMBER     PIC S9(9) BINARY.
**    Offset of data in physical message from start of logical message
   15 MQMD-OFFSET           PIC S9(9) BINARY.
**    Message flags
   15 MQMD-MSGFLAGS         PIC S9(9) BINARY.
**    Length of original message
   15 MQMD-ORIGINALLENGTH   PIC S9(9) BINARY.

PL/I declaración para MQMD

dcl
 1 MQMD based,
  3 StrucId          char(4),       /* Structure identifier */
  3 Version          fixed bin(31), /* Structure version number */
  3 Report           fixed bin(31), /* Options for report messages */
  3 MsgType          fixed bin(31), /* Message type */
  3 Expiry           fixed bin(31), /* Message lifetime */
  3 Feedback         fixed bin(31), /* Feedback or reason code */
  3 Encoding         fixed bin(31), /* Numeric encoding of message
                                       data */
  3 CodedCharSetId   fixed bin(31), /* Character set identifier of
                                       message data */
  3 Format           char(8),       /* Format name of message data */
  3 Priority         fixed bin(31), /* Message priority */
  3 Persistence      fixed bin(31), /* Message persistence */
  3 MsgId            char(24),      /* Message identifier */
  3 CorrelId         char(24),      /* Correlation identifier */
  3 BackoutCount     fixed bin(31), /* Backout counter */
  3 ReplyToQ         char(48),      /* Name of reply queue */
  3 ReplyToQMgr      char(48),      /* Name of reply queue manager */
  3 UserIdentifier   char(12),      /* User identifier */
  3 AccountingToken  char(32),      /* Accounting token */
  3 ApplIdentityData char(32),      /* Application data relating to
                                       identity */
  3 PutApplType      fixed bin(31), /* Type of application that put the
                                       message */
  3 PutApplName      char(28),      /* Name of application that put the
                                       message */
  3 PutDate          char(8),       /* Date when message was put */
  3 PutTime          char(8),       /* Time when message was put */
  3 ApplOriginData   char(4),       /* Application data relating to
                                       origin */
  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 */

Declaración de High Level Assembler para MQMD

MQMD                   DSECT
MQMD_STRUCID           DS   CL4   Structure identifier
MQMD_VERSION           DS   F     Structure version number
MQMD_REPORT            DS   F     Options for report messages
MQMD_MSGTYPE           DS   F     Message type
MQMD_EXPIRY            DS   F     Message lifetime
MQMD_FEEDBACK          DS   F     Feedback or reason code
MQMD_ENCODING          DS   F     Numeric encoding of message data
MQMD_CODEDCHARSETID    DS   F     Character set identifier of message
*                                 data
MQMD_FORMAT            DS   CL8   Format name of message data
MQMD_PRIORITY          DS   F     Message priority
MQMD_PERSISTENCE       DS   F     Message persistence
MQMD_MSGID             DS   XL24  Message identifier
MQMD_CORRELID          DS   XL24  Correlation identifier
MQMD_BACKOUTCOUNT      DS   F     Backout counter
MQMD_REPLYTOQ          DS   CL48  Name of reply queue
MQMD_REPLYTOQMGR       DS   CL48  Name of reply queue manager
MQMD_USERIDENTIFIER    DS   CL12  User identifier
MQMD_ACCOUNTINGTOKEN   DS   XL32  Accounting token
MQMD_APPLIDENTITYDATA  DS   CL32  Application data relating to identity
MQMD_PUTAPPLTYPE       DS   F     Type of application that put the
*                                 message
MQMD_PUTAPPLNAME       DS   CL28  Name of application that put the
*                                 message
MQMD_PUTDATE           DS   CL8   Date when message was put
MQMD_PUTTIME           DS   CL8   Time when message was put
MQMD_APPLORIGINDATA    DS   CL4   Application data relating to origin
MQMD_GROUPID           DS   XL24  Group identifier
MQMD_MSGSEQNUMBER      DS   F     Sequence number of logical message
*                                 within group
MQMD_OFFSET            DS   F     Offset of data in physical message
*                                 from start of logical message
MQMD_MSGFLAGS          DS   F     Message flags
MQMD_ORIGINALLENGTH    DS   F     Length of original message
*
MQMD_LENGTH            EQU  *-MQMD
                       ORG  MQMD
MQMD_AREA              DS   CL(MQMD_LENGTH)

Declaración de Visual Basic para MQMD

Type MQMD
  StrucId          As String*4  'Structure identifier'
  Version          As Long      'Structure version number'
  Report           As Long      'Options for report messages'
  MsgType          As Long      'Message type'
  Expiry           As Long      'Message lifetime'
  Feedback         As Long      'Feedback or reason code'
  Encoding         As Long      'Numeric encoding of message data'
  CodedCharSetId   As Long      'Character set identifier of message'
                                'data'
  Format           As String*8  'Format name of message data'
  Priority         As Long      'Message priority'
  Persistence      As Long      'Message persistence'
  MsgId            As MQBYTE24  'Message identifier'
  CorrelId         As MQBYTE24  'Correlation identifier'
  BackoutCount     As Long      'Backout counter'
  ReplyToQ         As String*48 'Name of reply queue'
  ReplyToQMgr      As String*48 'Name of reply queue manager'
  UserIdentifier   As String*12 'User identifier'
  AccountingToken  As MQBYTE32  'Accounting token'
  ApplIdentityData As String*32 'Application data relating to identity'
  PutApplType      As Long      'Type of application that put the'
                                'message'
  PutApplName      As String*28 'Name of application that put the'
                                'message'
  PutDate          As String*8  'Date when message was put'
  PutTime          As String*8  'Time when message was put'
  ApplOriginData   As String*4  'Application data relating to origin'
  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