Acerca del ejemplo de Respuesta de petición coordinada

El ejemplo de Respuesta de petición coordinada es una aplicación de ejemplo de flujo de mensajes que trata de una aplicación contemporánea y una aplicación establecida que se comunican mediante mensajes de WebSphere MQ en un patrón de proceso de petición/respuesta.  La aplicación contemporánea utiliza mensajes XML autodefinidos y emite un mensaje de petición. La aplicación establecida utiliza mensaje con formato físico personalizado (Custom Wire Format, CWF).  Recibe un mensaje de petición, lo procesa y entrega un mensaje de petición.  Para que las aplicaciones se comuniquen correctamente, los formatos han de transformarse, tanto en el mensaje de petición como en el de respuesta.

El ejemplo muestra cómo puede se llevar a cabo la conversión entre mensajes XML autodefinidos y mensajes CWF.  Además, el ejemplo muestra cómo se puede almacenar información en un información y recuperarla en otro.  En el ejemplo es necesario preservar las colas ReplyToQ y ReplyToQMgr del mensaje de petición inicial para poder utilizarlas cuando se reciba el mensaje de respuesta correspondiente.  En este caso, se utiliza un mensaje de WebSphere MQ para almacenar los detalles.

El proceso del mensaje está formado por tres flujos de mensajes y un conjunto de mensajes.  Los flujos de mensajes son:

El conjunto de mensajes Sample MSET que tiene una definición de mensaje SaleListMessage se utiliza en la conversión del formato del mensaje de XML a CWF en la sección del petición del proceso, y en la conversión de CWF a XML en la sección de respuesta del proceso.

Los detalles de los flujos de mensajes y del proceso que realizan están descritos abajo.

Flujo de mensajes Request (de petición)

El flujo de mensajes de petición realiza el siguiente proceso:

El flujo de mensajes de petición (Request) tiene los siguientes nodos:

El nodo MQInput GetRequestMsg lee el mensaje XML. Como el mensaje entrante tiene un formato XML autodefinido, no es necesario especificar ningún conjunto de mensajes o formato para que se analice correctamente.

El subflujo StoreOriginalMQMD_Sub encapsula el almacenamiento de los valores de ReplyToQ y ReplyToQMgr en un mensaje de WebSphere MQ.  Esta encapsulación se hace por dos motivos:  en primer lugar, permitir que la lógica del proceso pueda reutilizarse fácilmente en otros flujos de mensajes y, en segundo lugar, para permitir la sustitución de implementaciones alternativas. Por ejemplo, se puede crear una implementación alternativa que use un nodo de base de datos.

El nodo Compute TransformAndSetReplyTo realiza las siguientes operaciones:

  1. Copia las cabeceras de mensajes del mensaje de entrada en el árbol de mensajes de salida.
  2. Convierte el formato XML del mensaje de entrada al formato CWF. 
  3. Establece el formato, tipo y el conjunto de los mensajes para el mensaje de salida.
  4. Establece la ReplyToQ para que el nuevo mensaje sea el de la cola de entrada para el flujo del mensaje de respuesta.

El nodo MQOutput OutputRequestMsg graba el mensaje de salida de WebSphere MQ.

Flujo de mensaje Backend Reply (respuesta de fondo)

Los flujos de mensajes de respuesta de fondo realizan el los siguientes procesos:

  1. Leen un mensaje WebSphere MQ.
  2. Añaden la hora en que se modificó el mensaje a la carga útil del mensaje.
  3. Graban un mensaje WebSphere MQ.

El flujo de mensajes Backend Reply consta de los siguientes nodos:

El nodo MQInput GetRequestMsg lee el mensaje CWF. El formato, el conjunto de mensajes y el dominio necesarios para analizar el mensaje entrante se especifican en el nodo MQInput.

El nodo de cálculo Backend_Computation realiza las siguientes operaciones:

  1. Copia todo el mensaje de entrada en el árbol de mensajes de salida.
  2. Obtiene la hora actual del intermediario de mensajes y le da un nuevo formato.
  3. Añade la hora con el nuevo formato al árbol de mensajes de salida.

El nodo MQOutput PutReplyMsg graba el mensaje de salida de WebSphere MQ.

Flujo de mensajes Reply (de respuesta)

El flujo de mensajes de respuesta ejecuta el siguiente proceso:

  1. Lee un mensaje de WebSphere MQ que contiene un mensaje en formato CWF.
  2. Cambia el formato del mensaje por el formato XML equivalente.
  3. Obtiene las colas ReplyToQ ReplyToQMgr del mensaje de petición original leyendo el mensaje de WebSphere MQ que se usó para almacenar esta información en el flujo de mensajes de petición (Request).  Esto se hace mediante el nodo MQGet.
  4. Crea un mensaje de WebSphere MQ que contiene el mensaje con el nuevo formato y los valores de ReplyToQ y ReplyToQMgr.

El flujo de mensajes Reply consta de los siguientes nodos:

El nodo MQInput GetBackendReply lee el mensaje CWF. El formato, el conjunto de mensajes y el dominio necesarios para analizar el mensaje entrante se especifican en el nodo MQInput.

El nodo compute MapToRequestor realiza las siguientes operaciones:

  1. Copia las cabeceras de mensajes del mensaje de entrada en el árbol de mensajes de salida.
  2. Convierte el formato CWF del mensaje de entrada al formato XML.

El subflujo RestoreOriginalMQMD_Sub encapsula la recuperación de los valores de ReplyToQ y ReplyToQMgr. Lee el mensaje de WebSphere MQ que contiene los valores de ReplyToQ y ReplyToQMgr que se especificaron en el mensaje de petición original y los copia en el mensaje de respuesta.  Efectúa la lectura utilizando el nodo MQGet.   El nodo MQGet está configurado para seleccionar el mensaje correspondiente por IDCorrel y para copiar el MQMD de la petición original en el MQMD del mensaje que se está procesando. Esto se hace para dirigir el mensaje de respuesta de la aplicación establecida a la aplicación peticionaria correcta. El nodo MQGet también recupera la carga útil del mensaje de WebSphere MQ que se utilizó para almacenar los valores originales de ReplyToQ y ReplyToQMgr.

El nodo MQOutput PutOriginalReply graba el mensaje de salida de WebSphere MQ.

Mensaje de prueba

El mensaje de prueba utilizado en el ejemplo de respuesta de petición coordinada es un simple mensaje XML que contiene detalles de facturación para un cliente.   Durante el ejecución del ejemplo, el formato del mensaje XML se convierte en formato CWF.  El valor del campo CompletionTime es el único valor que ha de cambiarse durante la ejecución del ejemplo.   El mensaje se muestra abajo.

<SaleEnvelope>
<Header>
<SaleListCount>1</SaleListCount>
</Header>
<SaleList>
<Invoice>
<Initial>K</Initial>
<Initial>A</Initial>
<Surname>Braithwaite</Surname>
<Item>
<Code>00</Code>
<Code>01</Code>
<Code>02</Code>
<Description>Twister</Description>
<Category>Games</Category>
<Price>00.30</Price>
<Quantity>01</Quantity>
</Item>
<Item>
<Code>02</Code>
<Code>03</Code>
<Code>01</Code>
<Description>The Times Newspaper</Description>
<Category>Books and Media</Category>
<Price>00.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>00.50</Balance>
<Currency>Sterling</Currency>
</Invoice>
<Invoice>
<Initial>T</Initial>
<Initial>J</Initial>
<Surname>Dunnwin</Surname>
<Item>
<Code>04</Code>
<oode>05</Code>
<Code>01</Code>
<Description>The Origin of Species</Description>
<Category>Books and Media</Category>
<Price>22.34</Price>
<Quantity>02</Quantity>
</Item>
<Item>
<Code>06</Code>
<Code>07</Code>
<Code>01</Code>
<Description>Microscope</Description>
<Category>Miscellaneous</Category>
<Price>36.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>81.84</Balance>
<Currency>Euros</Currency>
</Invoice>
</SaleList>
<Trailer>
<CompletionTime>12.00.00</CompletionTime>
</Trailer>
</SaleEnvelope>

Icono de la página principal   Volver a la Página de presentación de ejemplos