Acerca del ejemplo de Direccionamiento de mensajes

El ejemplo de Direccionamiento de mensajes muestra cómo puede usarse una tabla de base de datos para almacenar información de direccionamiento que pueda utilizar un flujo de mensajes para direccionar mensajes a colas de WebSphere MQ. Esto es un planteamiento alternativo a la creación de información de direccionamiento grabada en el código en un nodo de cálculo de un flujo de mensajes.

La utilización de una base de datos es una forma aconsejada en WebSphere Message Broker para almacenar cualquier forma de datos de direccionamiento o transformación por los siguientes motivos:

El único problema de utilizar bases de datos para almacenar esa información es el descenso en el rendimiento que se produce al acceder a la base de datos cada vez que pasa un mensaje a través del flujo de mensajes.

Antes de la versión 6.0 de WebSphere Message Broker, fue necesario tomar una decisión entre el direccionamiento grabado en el código y la información de correlación en ESQL, o la utilización de una tabla de base de datos para almacenar la información. A menudo, la decisión se tomaba pensando en si el coste de rendimiento utilizando la base de datos es aceptable. En velocidades altas de mensajes, se decidía frecuentemente crear información grabado en el código que sería más fácil de mantener en una tabla de base de datos.

En la versión 6.0, se introdujo el concepto de 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 la utilización de variables compartidas pueden verse en el apartado Variables DECLARE. Utilizando variables compartidas se pueden almacenar tablas de base de datos en memoria en un flujo de mensajes. Esto elimina la necesidad de un acceso continuo a la tabla de base de datos, y proporciona casi todas las ventajas de utilizar una tabla de base de datos sin el descenso en la productividad. Tan solo falta una de las ventajas: la memoria caché no recogerá los cambios en la base datos 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 de Direccionamiento de mensajes muestra cómo puede usarse una tabla de base de datos para para direccionar mensajes en un flujo de mensajes y cómo un flujo de mensajes puede usar variables compartidas para almacenar la tabla 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.

El ejemplo de Direccionamiento de mensajes contiene dos flujos de mensajes:

El flujo de mensajes Routing_using_database_table

Un ejemplo de cómo direccionar un mensaje utilizando una tabla de base de datos. Este ejemplo de flujo de mensajes lee un mensaje de una cola de WebSphere MQSeries, 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.

El flujo de mensajes Routing_using_database_table

El flujo de mensajes Routing_using_memory_cache

Un ejemplo de cómo direccionar un mensaje utilizando una versión guardada en la memoria caché de la tabla de base de datos almacenada en variables compartidas. El flujo de mensajes tiene dos subflujos compartidos. El primer subflujo proporciona la misma funcionalidad que el flujo de mensajes Routing_using_database_table, pero usando variables compartidas. El segundo subflujo se usa para renovar las variables de memoria compartida.

El flujo de mensajes Routing_using_memory_cache

Mensaje de prueba

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 en la base de datos a fin de encontrar la cola de destino de cada cliente.

Tabla de base de datos usada para direccionar un menaje XML de facturación

Los flujos de mensaje del ejemplo, usan la misma 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 para búsquedas 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 son:

Columna Descripción
Variable1 La primera variable usada para buscar la cola de destino (está grabada en el código y no procede del mensaje XML)
Variable2 La segunda variable usada para buscar la cola de destino (procede del mensaje XML utilizando el campo <Initial>)
Variable3 La tercera variable usada para buscar la cola de destino (procede del mensaje XML utilizando el campo <Surname>)
Queue_manager Nombre del gestor de la cola de destino
Queue_name Nombre de la cola de destino

La definición de la tabla de la base de datos se proporciona en el proyecto de flujos 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 volver a utilizar esta tabla para muchos mensajes de direccionamiento diferentes. Si fuese así, la primera variable podría utilizarse para diferenciar los distintos nodos que utilizan la misma tabla.

Cada uno de los nodos de cálculo de los flujos de mensajes contiene comentarios ESQL detallados que explican exactamente lo que se ha hecho para conseguir el funcionamiento necesario:

La forma de visualizar el contenido de la base de datos del ejemplo depende de el 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. Si no ha instalado un producto de base de datos, los ejemplos utilizarán la base de datos Apache Derby. Las instrucciones para la visualización de los datos en una base de datos Derby, consulte Ver el contenido de una base de datos Derby.

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