El ejemplo de direccionamiento de mensajes muestra cómo se puede utilizar una tabla de base de datos o archivo para almacenar información que un flujo de mensajes puede utilizar para direccionar mensajes a colas de WebSphere MQ. Este es un método alternativo a la creación de información de direccionamiento codificada en un nodo Compute de un flujo de mensajes.
Usar una tabla de base de datos o de un archivo son maneras de almacenar cualquier formato de datos de redireccionamiento o transformación en WebSphere Message Broker. Ofrecen las ventajas siguientes:
Un problema con la utilización de bases de datos o archivos para almacenar esta información es el coste de rendimiento que se produce cuando se accede a la base de datos o al archivo cada vez que pasa un mensaje a través de un flujo de mensajes.
Para solucionar este problema, se pueden utilizar variables compartidas. Con las variables compartidas se puede almacenar un estado en flujos de mensajes que está disponible para todos los mensajes que utilicen el flujo. Los detalles exactos sobre cómo se utilizan las variables compartidas los podrá encontrar en Sentencia DECLARE en la documentación de WebSphere Message Broker. Utilizando variables compartidas, la información de las tablas de base de datos o archivos se pueden almacenar en la memoria de un flujo de mensajes. Este enfoque elimina la necesidad de acceso continuo a la tabla de base de datos o al archivo y ofrece casi todas las ventajas de utilizar una tabla de base de datos o archivo sin el coste de rendimiento. No obstante, la memoria caché no recoge los cambios en la tabla de base de datos o archivo a medida que se producen. Para recoger los cambios, deberá reiniciar el flujo de mensajes o añadir un mecanismo de renovación al flujo de mensajes.
El ejemplo Direccionamiento de mensajes muestra cómo utilizar una tabla de base de datos o archivo para direccionar mensajes en un flujo de trabajo y cómo un flujo de mensajes puede utilizar variables guardadas para almacenar la tabla o archivo de base de datos. También muestra cómo se puede renovar la tabla de la base de datos de la memoria caché reiniciando el flujo de mensajes o enviando un mensaje de renovación al flujo de mensajes.
Este flujo de mensajes simple lee un mensaje de una cola de WebSphere MQ, crea una lista de destinos basada en datos de una tabla de base de datos y, a continuación, direcciona el mensaje a las entradas de la lista de destinos.
Un ejemplo de cómo direccionar un mensaje utilizando una versión en memoria caché de la tabla de base de datos almacenada en variables compartidas. El flujo de mensajes tiene dos subflujos principales. El primer subflujo proporciona la misma funciones que el flujo de mensajes Routing_using_database_table, pero utilizando variables compartidas. El segundo subflujo se utiliza para renovar las variables de memoria compartida.
Tres escenarios muestran cómo direccionar mensajes utilizando el nodo FileRead. El primero utiliza un archivo en formato XML, y el segundo y tercero un formato CSV (valores separados por comas). Los formatos mostrados son ejemplos. Puede utilizar cualquier formato de archivo tanto si está leyendo el archivo completo como si selecciona un solo registro del archivo.
Este flujo de mensajes lee un mensaje de una cola de WebSphere MQ. Seguidamente se lee el archivo completo y se crea una lista de destinos basándose en el contenido del archivo. En este escenario el archivo está en formato XML. Los mensajes se direccionan a las entradas de la lista de destinos.
El nodo FileRead de este ejemplo utiliza una expresión XPath para localizar el registro correcto en el archivo, basado en una clave del mensaje de entrada. El archivo utilizado en este escenario contiene registros en formato CSV. Un conjunto de mensajes se utiliza para modelar cada registro del archivo. La información de direccionamiento del registro se copia directamente en la lista de datos de destino, para que el nodo MQOutput la utilice directamente. Como resultado, ningún proceso adicional (por ejemplo mediante un nodo Compute) es necesario.
Este flujo amplía el flujo anterior, mostrando cómo utilizar variables ESQL compartidas para almacenar información del archivo en la memoria caché. Un subflujo adicional renueva la memoria caché variable compartida.
Se pueden establecer tres expresiones XPath en la pestaña de resultados del nodo FileRead:
Propiedad | Expresión | Explicación |
---|---|---|
Ubicación de datos de resultado | $ResultRoot/MRM/data | En el registro que está seleccionado, este campo del registro se utiliza para enriquecer el mensaje. El contenido de este campo se copia en la ubicación de datos de salida. |
Ubicación de datos de salida | $OutputLocalEnvironment/Destination/MQ | |
Expresión de selección de registro | (concat( $InputRoot/XMLNSC/SaleEnvelope/SaleList/Invoice/Initial[1], $InputRoot/XMLNSC/SaleEnvelope/SaleList/Invoice/Initial[2] ) = $ResultRoot/MRM/Initial ) AND ($InputRoot/XMLNSC/SaleEnvelope/SaleList/Invoice/Surname = $ResultRoot/MRM/Surname) |
La primera parte de la expresión concatena las dos iniciales del mensaje. La segunda parte de la expresión toma la parte del apellido del mensaje. El registro que coincide con las iniciales y el apellido es el que se propagará. |
El mensaje de prueba que se utiliza para dirigir el ejemplo de Direccionamiento de mensajes es un mensaje XML sencillo que contiene detalles de facturación para un cliente.
<SaleEnvelope> <Header> <SaleListCount>1</SaleListCount> </Header> <SaleList> <Invoice> <Initial>T</Initial> <Initial>D</Initial> <Surname>Montana</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> </SaleList> <Trailer> <CompletionTime>12.00.00</CompletionTime> </Trailer> </SaleEnvelope>
Los campos Initial y Surname se utilizan para efectuar la búsqueda a fin de encontrar la cola de destino de cada cliente.
Los flujos de mensajes de ejemplo utilizan la misma tabla de base de datos para obtener la información de direccionamiento. La tabla de base de datos contiene cinco columnas: las tres primeras contienen información de búsqueda que procede del mensaje entrante y las dos últimas contienen los detalles de la cola y el gestor de colas a los que se direcciona el mensaje. Las columnas se muestran en la tabla siguiente:
Columna | Descripción |
---|---|
Variable1 | La primera variable que se utiliza para buscar la cola de destino (esta variable está codificada en el ejemplo y no se deriva del mensaje XML). |
Variable2 | La segunda variable que se utiliza para buscar la cola de destino (esta variable se deriva del mensaje XML mediante el campo Initial). |
Variable3 | La tercera variable usada para buscar la cola de destino (esta variable se deriva del mensaje XML mediante el campo Surname). |
Queue_manager | El nombre del gestor de colas de destino. |
Queue_name | El nombre de la cola de destino. |
La definición de la tabla de base de datos se proporciona en el proyecto de flujo de mensajes de ejemplo que aparece en el directorio Database. La tabla de base de datos no se enlaza directamente al mensaje XML entrante, por lo que será posible reutilizar esta tabla para mensajes de direccionamiento diferentes. Si la tabla de base de datos se ha enlazado directamente con el mensaje XML de entrada, la primera variable puede utilizarse para diferenciar los distintos nodos que utilizan la misma tabla.
Cada uno de los nodos Compute de los flujos de mensajes contiene comentarios ESQL detallados que describen con exactitud lo realizado para obtener el funcionamiento necesario:
La forma de visualizar el contenido de la base de datos del ejemplo depende del producto de base de datos que se haya instalado. Para bases de datos DB2, utilice las herramientas proporcionadas por DB2; por ejemplo, el Centro de control de DB2.
Se utilizan dos archivos XML en este flujo de mensajes. Ambos tienen la misma estructura, pero uno contiene varios destinos para el mensaje. El archivo XML tiene dos elementos:
Estos flujos de mensajes utilizan un archivo CSV. El archivo contiene varios registros, cada uno de los cuales tiene cuatro elementos:
Cada uno de los nodos Compute de los flujos de mensajes contiene comentarios ESQL detallados que explican exactamente lo que se ha hecho para conseguir el funcionamiento necesario:
La imagen siguiente muestra el conjunto de mensajes que se utilizan para los flujos de mensajes Routing_using_records_file y Routing_using_file_memory_cache.
Desde el conjunto de mensajes puede ver cada uno de los campos que se muestran en el archivo CSV. El elemento DestinationData se repite una vez para cada cola de destino a la que se enviará el mensaje.