Utilización de un nodo MQGet en un flujo de petición-respuesta

Para obtener detalles del proceso realizado en el nodo MQGet para lograr lo indicado anteriormente, consulte Proceso de mensajes de nodo MQGet. Para obtener detalles sobre cómo crear este tipo de flujo, consulte el Ejemplo de respuesta de petición coordinada

Introducción

Esta página es una introducción a la utilización de un nodo MQGet en un flujo de petición-respuesta y describe cómo procesa el nodo los mensajes de entrada (de acuerdo con los parámetros de entorno local y de entrada que establezca) para crear los mensajes de salida.

Un flujo de petición y respuesta entre dos aplicaciones permite que una de las aplicaciones solicite mensajes a la otra. En el diagrama siguiente se ilustra este tipo de flujo:

La imagen se describe en el texto más abajo.

En el diagrama, la aplicación solicitante coloca un mensaje en la cola de entrada de "petición" de la aplicación de respuesta. Entonces la aplicación de respuesta procesa el mensaje y envía una respuesta a la cola de "respuesta" especificada en el mensaje original de la aplicación solicitante.

Si una de estas aplicaciones se debe sustituir o mejorar sin realizar cambios en la otra, será necesario transformar los mensajes entre las dos aplicaciones. Para lograrlo, se puede insertar el intermediario entre ellos, como se muestra en el diagrama siguiente:

La imagen se describe en el texto más abajo.

Ahora se configura un alias de cola, o un dispositivo similar, para que la aplicación solicitante coloque el mensaje de petición en la cola de entrada del flujo de mensajes de intermediario de "Respuesta de petición coordinada". En el ejemplo anterior, este mensaje se ha colocado directamente en la cola de entrada de la aplicación de respuesta. El flujo de "Respuesta de petición coordinada" transforma el mensaje a un formato adecuado para la aplicación de respuesta y lo pasa a la cola de entrada. También guarda los detalles de cola de respuesta de la aplicación solicitante original y los restaura en el mensaje de respuesta que recibe de la aplicación de respuesta para que poder mostrarse otra vez correctamente en la aplicación solicitante.

Un nodo MQGet se puede colocar en cualquier lugar de un flujo y recibe en el terminal de entrada un árbol de entrada propagado desde el nodo anterior. Entonces utiliza el mensaje recuperado de la cola de WebSphere MQ configurada para crear un árbol de resultado. Finalmente, utiliza el árbol de entrada y el árbol de resultado para crear un árbol de salida que, a continuación, se propaga al terminal de salida, de aviso o de anomalía en función de la configuración del nodo y del resultado de la operación Get.

Para obtener más detalles sobre cómo crear un flujo, consulte el ejemplo: Ejemplo de respuesta de petición coordinada.

Cómo se utiliza el entorno local

El nodo MQGet lee y actualiza el entorno local propagado desde el nodo anterior.

  • La estructura MQGMO se leerá desde ${inputMQParmsLocation}.MQGMO.*
  • Los códigos de terminación y de razón de MQ se colocarán en ${outputMQParmsLocation}.CC y .RC
  • Si existe un árbol MQGMO en el entorno loca, se actualizará con los valores utilizados por el nodo y se propagará en sentido descendente
  • Si ${inputMQParmsLocation}.MQMD existe, el MQMD pasado a la propia llamada MQGET (que contiene los valores especificados en el mensaje de entrada o generados por el nodo) se colocará en esa ubicación, suprimiendo todo lo que ya haya en dicha ubicación.

${inputMQParmsLocation} es el valor establecido en la propiedad de nodo MQGet Ubicación de parámetros MQ de entrada en la pestaña Propiedades de petición.

${outputMQParmsLocation} es el valor establecido en la propiedad de nodo MQGet Ubicación de parámetros MQ de salida en la pestaña Propiedades de resultado.

Para obtener detalles de estas propiedades, consulte Nodo MQGet.

En resumen:
${inputMQParmsLocation}
  • NombreCola: Alteración opcional para la propiedad de nodo MQGet Nombre de cola.
  • TamañoAlmacenamientoIntermedioInicial: Alteración opcional para la propiedad de nodo MQGet Tamaño almacenamiento intermedio inicial.
  • MQGMO.*: Opciones de mensaje Get de MQ opcionales que el nodo MQGet utilizará.
${outputMQParmsLocation}
  • CC: Código de terminación de llamada Get de MQ.
  • RC: Código de resultado de llamada Get de MQ.
  • MQGMO.*: Uso de opciones de mensaje Get de MQ si está presente en ${inputMQParmsLocation}.
  • MQMD: Descriptor de mensaje MQ para mensajes recibidos.

Cómo se construye el MQMD para llamada MQGet

  • Si no proporciona un MQMD de entrada, se utiliza un MQMD por omisión, como se describe en la publicación WebSphere MQ Application Programming Reference.
  • Si proporciona un MQMD de entrada, éste se utiliza de uno de los modos siguientes:
    • Si el atributo Utilizar MQMD de entrada completo está establecido, se utiliza el MQMD de entrada en su totalidad.
    • Si el atributo Utilizar MQMD de entrada completo no está establecido, se prepara un MQMD por omisión del MQMD de entrada; si los recuadros de selección messageID o correlID están establecidos, se copian en él los respectivos ID.

El diagrama siguiente muestra de forma un poco más detallada cómo el nodo MQGet construye el MQMD que se debe utilizar e la llamada a WebSphere MQ:

El diagrama se describe en el texto de arriba.

Cómo se construye el árbol de mensaje de salida

El diagrama siguiente muestra cómo se construye el árbol de mensaje de salida combinando el árbol de entrada del nodo anterior con el árbol de resultado de la llamada MQGet:

El diagrama se describe en el texto de arriba.

A continuación se muestra un ejemplo, donde las propiedades de nodo MQGet están configuradas como se listan:
copyMessage
copyEntireMessage
generateMode
message
outputDataLocation
OutputRoot.XML.A
resultDataLocation
ResultRoot.XML.C
En este ejemplo, el árbol de salida se construye de acuerdo con la secuencia siguiente:
  1. Se copia la totalidad del árbol de entrada en el árbol de salida, incluida la ramificación XML con el hijo A y el hijo B de A.
  2. Desde el árbol de resultado, el hijo C de la ramificación XML y el hijo D de C se ponen en el árbol de salida en la posición OutputRoot.XML.A. El contenido anterior de A (valores e hijos) se pierde y se sustituye por el contenido de C, incluidos todos los valores e hijos que tenga, en este caso el hijo D.
  3. La posición en el árbol de salida continúa con el nombre A.
El diagrama siguiente lo ilustra visualmente:

El diagrama se describe en el texto de arriba.

Ejemplos de árbol de mensaje

A continuación se muestran unos ejemplos de cómo se construyen árboles de mensajes de acuerdo con las normas descritas anteriormente.

Tabla 1. Entrada, entorno local y MQGet de ejemplo
Con un mensaje ensamblado como éste: El mensaje que MQGet devuelve es:
InputRoot
MQMD
{mqmd de mensaje de entrada}
MQRFH2
{mqrfh2 de mensaje de entrada}
XMLNS
{cuerpo de mensaje de entrada}
InputLocalEnvironment
MQ
GET
MQGMO
MatchOptions = MQMO_MATCH_CORREL_ID
MQMD (sin hijos)
MyData
MQMD
{mqmd de entrada} (con CorrelID = {ID de correlación correcto como binario})
Inicio del cambio
ResultRoot
MQMD
{mqmd de mensaje de resultado}
MQRFH2
{mqrfh2 de mensaje de resultado}
XML
{cuerpo de mensaje de resultado}
Fin del cambio
Tabla 2. Árboles de mensajes de salida resultantes de ejemplo, de acuerdo con los valores de propiedades de nodo MQGet detallados.
Con los valores siguientes: El mensaje ensamblado de salida resultante es:
inputMQMDLocation
InputLocalEnvironment.MyData.MQMD
copyMessage
copyEntireMessage
copyLocalEnv
copyEntireLocalEnvironment
generateMode
messageAndLocalEnvironment
outputDataLocation
InputLocalEnvironment.MyData.ReturnedMessage
OutputRoot
MQMD
{mqmd de mensaje de entrada}
MQRFH2
{mqrfh2 de mensaje de entrada}
XMLNS
{cuerpo de mensaje de entrada}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo utilizado para get}
MQMD
{mqmd utilizado para get}
CC = 0
RC = 0
MyData
MQMD
{mqmd de entrada} (con CorrelID = {ID de correlación correcto como binario})
ReturnedMessage
MQMD
{mqmd de mensaje de resultado}
MQRFH2
{mqrfh2 de mensaje de resultado}
XML
{cuerpo de mensaje de resultado}
resultDataLocation
ResultRoot.XML
OutputRoot
MQMD
{mqmd de mensaje de entrada}
MQRFH2
{mqrfh2 de mensaje de entrada}
XMLNS
{cuerpo de mensaje de entrada}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo utilizado para get}
MQMD
{mqmd utilizado para get}
CC = 0
RC = 0
MyData
MQMD
{mqmd de entrada} (con CorrelID = {ID de correlación correcto como binario})
ReturnedMessage (con cualesquiera atributos y valor de ResultRoot.XML)
{cuerpo de mensaje de resultado}

Este árbol es el resultado de la realización de una asignación de ${resultDataLocation} a ${outputDataLocation} de forma efectiva. Se copia el valor del elemento de origen, igual que se copian todos los hijos incluidos los atributos.

copyLocalEnv
ninguno
OutputRoot
MQMD
{mqmd de mensaje de entrada}
MQRFH2
{mqrfh2 de mensaje de entrada}
XMLNS
{cuerpo de mensaje de entrada}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo utilizado para get}
MQMD
{mqmd utilizado para get}
CC = 0
RC = 0
MyData
ReturnedMessage (con cualesquiera atributos y valor de ResultRoot.XML)
{cuerpo de mensaje de resultado}

Este árbol tiene el MQMD utilizado para 'get' (obtención) en OutputLocalEnvironment porque la ubicación de los parámetros de MQ de entrada tenía un elemento MQMD debajo de él. Aunque el árbol de entrada no se copia, la presencia del elemento MQMD hace que el MQMD utilizado para 'get' se ponga en el árbol de salida.

outputDataLocation
<en blanco>
copyLocalEnv
copyEntireLocalEnvironment
OutputRoot
MQMD
{mqmd de mensaje de resultado}
MQRFH2
{mqrfh2 de mensaje de resultado}
XMLNS
{cuerpo de mensaje de resultado}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo utilizado para get}
MQMD
{mqmd utilizado para get}
CC = 0
RC = 0
MyData
MQMD
{mqmd de entrada} (con CorrelID = {ID de correlación correcto como binario})

En este caso, el establecimiento de copyMessage no importa en el árbol de salida final.

Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ac34680_