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 se puede 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:
Lee un mensaje de petición de una aplicación que puede grabar el mensaje de prueba para este ejemplo, transforma la carga útil de XML a CWF, y graba un mensaje de salida cuya carga útil está en formato CWF. El flujo de mensajes Backend Reply, que simula ser una aplicación establecida, lee y procesa ese mensaje.
Simula ser una aplicación establecida que recibe un mensaje WebSphere MQ que contiene una carga útil en formato CWF, realiza algún tipo de proceso en su contenido y graba un mensaje de respuesta WebSphere MQ en el que la carga útil está en formato CWF.
Lee el mensaje de respuesta del flujo de mensajes Backend Reply, cambia la carga útil de CWF a XML y graba un mensaje de salida que contiene una carga útil en formato XML. Este mensaje lo lee y lo procesa la aplicación que lo ha originado.
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.
El flujo de mensajes de petición realiza el siguiente proceso:
El flujo de mensajes 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:
El nodo MQOutput OutputRequestMsg graba el mensaje de salida de WebSphere MQ.
Los flujos de mensajes de respuesta de fondo realizan el los siguientes procesos:
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:
El nodo MQOutput PutReplyMsg graba el mensaje de salida de WebSphere MQ.
El flujo de mensajes de respuesta ejecuta el siguiente proceso:
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:
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.
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>