Tipos de mensajes

Hay cuatro tipos de mensajes definidos por IBM® MQ.

Las aplicaciones pueden utilizar los tres primeros tipos de mensajes para pasar información entre ellos. El cuarto tipo, informe, es para que lo utilicen las aplicaciones y los gestores de colas para informar sobre sucesos como la aparición de un error.

Cada tipo de mensaje se identifica mediante un valor MQMT_*. También puede definir sus propios tipos de mensajes. Para ver el rango de valores que puede utilizar, consulte MsgType.

Datagramas

Utilice un datagrama cuando no necesita una respuesta de la aplicación que recibe el mensaje (es decir, obtiene el mensaje de la cola).

Un ejemplo de una aplicación que puede utilizar datagramas es la que muestra información de vuelos en la sala de un aeropuerto. Un mensaje puede contener los datos de una pantalla completa de información de vuelos. Este tipo de aplicación es poco probable que solicite un acuse de recibo de un mensaje, porque probablemente no importa si el mensaje no se entrega. La aplicación envía un mensaje de actualización después de un breve periodo de tiempo.

Mensajes de solicitud

Utilice un mensaje de solicitud cuando desee una respuesta de la aplicación que recibe el mensaje.

Un ejemplo de una aplicación que puede utilizar mensajes de solicitud es la que muestra el saldo de una cuenta corriente. El mensaje de solicitud puede contener el número de cuenta y el mensaje de respuesta puede contener el saldo de la cuenta.

Si desea enlazar el mensaje de respuesta con el mensaje de solicitud, hay dos opciones:
  • Asegurarse de que la aplicación que maneja el mensaje de solicitud es responsable de garantizar que transfiere información al mensaje de respuesta que se relaciona con el mensaje de solicitud.
  • Utilizar el campo de informe en el descriptor de mensaje del mensaje de solicitud para especificar el contenido de los campos MsgId y CorrelId del mensaje de respuesta:
    • Puede solicitar que el campo MsgId o CorrelId del mensaje original se copie en el campo CorrelId del mensaje de respuesta (la acción predeterminada es copiar MsgId).
    • Puede solicitar que se genere un nuevo MsgId para el mensaje de respuesta, o que el campo MsgId del mensaje original se copie en el campo MsgId del mensaje de respuesta (la acción predeterminada es generar un nuevo identificador de mensaje).

Mensajes de respuesta

Utilice un mensaje de respuesta cuando responda a otro mensaje.

Cuando cree un mensaje de respuesta, respete las opciones que se han establecido en el descriptor de mensaje del mensaje al que está respondiendo. Las opciones de informe especifican el contenido de los campos de identificador de mensaje (MsgId) y de identificador de correlación (CorrelId). Estos campos permiten que la aplicación que recibe la respuesta correlacione la respuesta con la solicitud original.

Mensajes de informe

Los mensajes de informe informan a las aplicaciones sobre sucesos como la aparición de un error al procesar un mensaje.

Los puede generar:
  • Un gestor de colas,
  • Un agente de canal de mensajes (por ejemplo, si no pueden entregar el mensaje) o bien
  • Una aplicación (por ejemplo, si no puede utilizar los datos del mensaje).

Los mensajes de informe se pueden generar en cualquier momento y pueden llegar a una cola cuando la aplicación no los esperaba.

Tipos de mensaje de informe
Al poner un mensaje en una cola, puede seleccionar que se reciba:
  • Un mensaje de informe de excepción. Se envía como respuesta a un mensaje con un conjunto de distintivos de excepciones. Lo genera el agente de canal de mensaje (MCA) o la aplicación.
  • Un mensaje de informe de caducidad. Indica que una aplicación ha intentado recuperar un mensaje que había alcanzado el umbral de caducidad; el mensaje se marca para descartarse. Este tipo de informe lo genera el gestor de colas.
  • Un mensaje de informe de confirmación de llegada (COA) Indica que el mensaje ha llegado a su cola de destino. Lo genera el gestor de colas.
  • Un mensaje de informe de confirmación de entrega (COD). Indica que el mensaje lo ha recuperado una aplicación receptora. Lo genera el gestor de colas.
  • Un mensaje de informe de notificación de acción positiva (PAN). Indica que una solicitud se ha atendido satisfactoriamente (es decir, la acción solicitada en el mensaje se ha realizado satisfactoriamente). Este tipo de informe lo genera la aplicación.
  • Un mensaje de informe de notificación de acción negativa (NAN). Indica que una solicitud no se ha atendido satisfactoriamente (es decir, la acción solicitada en el mensaje no se ha realizado satisfactoriamente). Este tipo de informe lo genera la aplicación.
Nota: Cada tipo de mensaje de informe contiene uno de los siguientes:
  • El mensaje original entero
  • Los 100 primeros bytes de datos del mensaje original
  • Ningún dato del mensaje original

Puede solicitar más de un tipo de mensaje de informe cuando pone un mensaje en una cola. Cuando selecciona las opciones del mensaje de informe de confirmación de entrega y del mensaje de informe de excepción, si el mensaje no consigue entregarse, recibe un mensaje de informe de excepción. Sin embargo, si solo selecciona la opción del mensaje de informe de confirmación de entrega y el mensaje no consigue entregarse, no obtiene un mensaje de informe de excepción.

Los mensajes de informe que solicita, cuando los criterios para generar un mensaje concreto se cumplen, son los únicos que recibe.

Opciones de mensaje de informe

Puede descartar un mensaje después de que haya surgido una excepción. Si selecciona la opción de descartar y ha solicitado un mensaje de informe de excepción, el mensaje de informe va a ReplyToQ y ReplyToQMgr, y el mensaje original se descarta.

Nota: Una ventaja de esto es que puede reducir el número de mensajes que van a la cola de mensajes no entregados. Pero también significa que la aplicación, a menos que solo envíe mensajes de datagrama, tiene que manejar los mensajes devueltos. Cuando se genera un mensaje de informe de excepción, hereda la persistencia del mensaje original.

Si un mensaje de informe no se puede entregar (si la cola está llena, por ejemplo), el mensaje de informe se coloca en la cola de mensajes no entregados.

Si desea recibir un mensaje de informe, especifique el nombre de la cola de respuestas en el campo ReplyToQ; de lo contrario, la llamada MQPUT o MQPUT1 del mensaje original falla con MQRC_MISSING_REPLY_TO_Q.

Puede utilizar otras opciones de informe en el descriptor de mensaje (MQMD) de un mensaje para especificar el contenido de los campos MsgId y CorrelId de cualquier mensaje de informe que se cree para el mensaje:
  • Puede solicitar que los campos MsgId o CorrelId del mensaje original se copien en el campo CorrelId del mensaje de informe. La acción predeterminada es copiar el identificador de mensaje. Utilice MQRO_COPY_MSG_ID_TO_CORRELID porque permite que el remitente de un mensaje correlacione el mensaje de respuesta o de informe con el mensaje original. El identificador de correlación del mensaje de respuesta o de informe es idéntico al identificador de mensaje del mensaje original.
  • Puede solicitar que se genere un nuevo MsgId para el mensaje de informe o bien que el campo MsgId del mensaje original se copie en el campo MsgId del mensaje de informe. La acción predeterminada es generar un nuevo identificador de mensaje. Utilice MQRO_NEW_MSG_ID, ya que garantiza que cada mensaje del sistema tenga un identificador de mensaje diferente y que se pueda distinguir claramente de los demás mensajes del sistema.
  • Las aplicaciones especializadas podrían necesitar utilizar MQRO_PASS_MSG_ID o MQRO_PASS_CORREL_ID. No obstante, debe diseñar una aplicación que lea los mensajes de la cola para asegurarse de que funciona correctamente cuando, por ejemplo, la cola contiene varios mensajes con el mismo identificador de mensaje.

    Las aplicaciones de servidor deben comprobar los valores de estos distintivos en el mensaje de solicitud y establecer correctamente los campos MsgId y CorrelId en el mensaje de respuesta o de informe.

    Las aplicaciones que actúan como intermediarios entre una aplicación solicitante y una aplicación de servidor no necesitan comprobar los valores de estos distintivos. Esto se debe a que normalmente estas aplicaciones tienen que reenviar el mensaje a la aplicación de servidor con los campos MsgId, CorrelId y Report sin modificar. Esto permite a la aplicación de servidor copiar MsgId del mensaje original en el campo CorrelId del mensaje de respuesta.

Al generar un informe sobre un mensaje, las aplicaciones de servidor deben comprobar si se ha establecido alguna de estas opciones.

Para obtener más información sobre cómo utilizar los mensajes de informe, consulte Informe.

Para indicar la naturaleza del informe, los gestores de colas utilizan un rango de códigos de feedback. Colocan estos códigos en el campo Feedback del descriptor de mensaje de un mensaje de informe. Los gestores de colas también pueden devolver códigos de razón MQI en el campo Feedback. IBM MQ define un rango de códigos de comentarios para que los utilicen las aplicaciones.

Para obtener más información sobre los comentarios y los códigos de razón, consulte Comentarios.

Un ejemplo de un programa que puede utilizar un código de feedback es el que supervisa las cargas de trabajo de otros programas que atienden una cola. Si hay más de una instancia de un programa que sirve a una cola y el número de mensajes que llegan a la cola ya no lo justifica, un programa de este tipo puede enviar un mensaje de informe (con el código de feedback MQFB_QUIT) a uno de los programas de servicio para indicar que el programa debe terminar su actividad. (Un programa de supervisión puede utilizar la llamada MQINQ para averiguar cuántos programas están dando servicio a una cola).