Ampliación del ejemplo de Direccionamiento de mensajes

El ESQL del ejemplo de Direccionamiento de mensajes se ha diseñado de forma que pueda modificarse para utilizarlo en otros flujos de mensajes con muy pocos cambios.

Reutilizar el flujo de mensajes Routing_using_memory_cache

El archivo ESQL Routing_using_memory_cache contiene todo el ESQL usando en la versión en memoria caché del ejemplo. Abra este archivo y busque la siguiente sección (marcada como Sección 1 en el ESQL):

Routing_using_memory_cache.esql

Deberá cambiar las tres partes resaltadas (secciones 1, 2 y 3) basándose en el mensaje que va a direccionar el ESQL:

  1. Las tres variables ESQL: Variable1, Variable2, Variable3, son utilizadas por el nodo de cálculo para ver el gestor de colas de destino y la cola en la tabla de la base de datos. Estas variables pueden estar grabadas en el código o pueden derivarse del mensaje entrante. El el ejemplo, el primer valor está grabado en el código y los dos otros se derivan del mensajes XML entrante. Es práctico tener el primer valor grabado en el código para poder utilizar un valor distinto para cada tipo de mensaje que pueda direccionarse. De este modo, una tabla de base de datos puede utilizarse para distintos conjuntos de datos de direccionamiento. Para crear un valor grabado en el código, establezca su valor en la sentencia DECLARE. En el ejemplo, la Variable1 tiene establecido el valor SAMPLE_QUEUES.
  2. Esta sección del ESQL muestra cómo pueden usarse la información procedente del mensaje para establecer las otras dos variables. Para un tipo o formato distinto, es necesario volver a escribir completamente esta parte para que hagan referencia a los campos del mensaje entrante que es necesario utilizar para el direccionamiento.
  3. Si hubiese algún problema estableciendo las Variables, se establecerían los valores por omisión. En el ejemplo, se establecen en el valor por omisión.

Puede dejar el resto del ESQL sin cambios cuando vuelva a utilizarlo para permitir las funciones de direccionamiento en otro flujo de mensajes. La tabla de la base de datos ha de actualizarse con cualquier nueva entrada que requiera el nuevo flujo. Vea el script de base de datos setupRoutingDatabase que se suministra con el ejemplo en el proyecto de flujos de mensajes.

Lo más importante que ha de hacerse cuando se utiliza el ESQL es asegurarse de que la modalidad de las propiedades del nodo de cálculo (Compute) se ha establecido en uno de los siguientes valores, de lo contrario la información de direccionamiento se perderá:

El nombre de origen de la ODBC también ha de añadirse a las propiedades del nodo de cálculo.

Modificar el ámbito del bloque BEGIN ATOMIC ... END;

La sentencia BEGIN ATOMIC ... END; se utiliza en el flujo de mensajes Routing_using_memory_cache para asegurarse de únicamente una hebra utiliza a la vez la memoria caché. La limitación a una sola hebra en esta parte del ESQL es únicamente importante si la memoria caché va a renovarse dinámicamente. Si se ha decidido que no es necesario renovar la memoria caché durante la vida del flujo de mensajes, el ámbito del bloque atómico puede reducirse para cubrir únicamente la inicialización de la memoria caché. La siguiente figura muestra el ESQL actual (marcado como Sección 4 en el ESQL):

mover bloque de inicio
  1. BEGIN ATOMIC indica que el siguiente ESQL va a ser de una sola hebra hasta que se llegue a la sentencia "END;" correspondiente.
  2. El comentario ESQL marcado con el número 4 muestra adónde puede trasladarse la sentencia "END;" si la memoria caché no va a renovarse dinámicamente.
  3. Es necesario eliminar la sentencia "END;" actual si se coloca una nueva "END;" en el marcador 4 de arriba.

Después de haber realizado esta modificación, la búsqueda del nombre de la cola en la memoria caché dejará de ser de una sola hebra. En la memoria caché se pueden leer varios mensajes simultáneamente.

Utilizar variables externas para que sea más fácil desplegar el flujo de mensajes a distintos sistemas

Las variables externas permiten promocionar los valores de flujos de mensajes grabados en el código en el nivel del flujo de mensajes para poderlos modificar al realizar el despliegue. El flujo de mensajes puede personalizarse al realizar el despliegue para el entorno en el que se está desplegando sin necesidad de modificar el ESQL del flujo de mensajes.

El flujo de mensajes Routing_using_memory_cache tiene una variable llamada Variable1, que se utiliza para realizar la búsqueda de la base de datos. Está grabada en el código para el valor SAMPLE_QUEUES. Es adecuado externalizar esta variable al realizar el despliegue de forma que se pueda modificar este valor según sea el sistema en el que se efectúa el despliegue. Esto permite después utilizar distintos conjuntos de colas y gestores de colas para cada sistema, utilizando la misma tabla de base de datos.

Para que la Variable1 sea una variable externa:

  1. Modifique el ESQL para declarar la Variable1 como variable externa. Cambie DECLARE Variable1 CHAR 'SAMPLE_QUEUES' por DECLARE Variable1 EXTERNAL CHAR 'SAMPLE_QUEUES'. El ESQL debería ser como éste:
    -- Section 1
    DECLARE Variable1 EXTERNAL CHAR 'SAMPLES_QUEUES';
    DECLARE Variable2 CHAR;
    DECLARE Variable3 CHAR;
  2. La variable externa deberá definirse entonces a nivel del flujo de mensajes. Abra el flujo de mensajes Routing_using_memory_cache y pulse en el separador Propiedades definidas por el usuario que se encuentra al final del Editor de flujos de mensajes. Cree una nueva propiedad llamada Variable1 y establezca su valor por omisión en SAMPLE_QUEUES:

    Propiedades definidas por el usuario

  3. La variable Variable1 es ahora una variable externa. Añada el flujo de mensajes a un archivo bar y pulse después en el separador Configurar. Seleccione el nodo de cálculo en el flujo. Debería poder cambiar el valor de la variable:

    Editor del archivo bar

Para usar esta variable externa ha de realizar nuevas entradas en la tabla ROUTING_TABLE de la base de datos ROUTING que tiene parámetros distintos para la Variable1. Si el flujo se despliega sin cambiar el valor de Variable1, debería funcionan como antes. (Variable1 debe tomar por omisión el valor SAMPLE_QUEUES).

Modificación de los criterios de renovación de memoria caché

Los actuales criterios de renovación de la memoria caché de la tabla de base de datos del ejemplo de Direccionamiento de mensajes son:

Podría ser de utilidad utilizar otros criterios para decidir cuando renovar la memoria caché. Los criterios podrían ser:

  1. Renovar la memoria caché tras un periodo de tiempo específico
  2. Renovar la memoria caché tras un número específico de mensajes

El ejemplo puede modificarse fácilmente para utilizar cualquiera de estos criterios. El lugar crítico del ESQL para la renovación de la memoria caché es:

criterios ESQL

Para cambiar el criterio de renovación de forma que se utilice un periodo de tiempo de 60 segundos:

  1. Cambie el criterio marcado en rojo en en el ESQL por:

    IF CacheQueueTable.LastUpDate is null or (CURRENT_TIMESTAMP - CacheQueueTable.LastUpDate) second > INTERVAL '60' SECOND THEN

  2. Cambie SET CacheQueueTable.valid = true; por

    SET CacheQueueTable.LastUpDate = CURRENT_TIMESTAMP;

Para cambiar el criterio de renovación para que sea verdadero (true) tras 100 mensajes:

  1. Cambie el criterio marcado en rojo en en el ESQL por:

    IF CacheQueueTable.MessageCount is null or CacheQueueTable.MessageCount > 100 SECOND THEN

  2. Cambie SET CacheQueueTable.valid = true; por

    SET CacheQueueTable.MessageCount = 0;

  3. Añada una sentencia al final del módulo de ESQL para incrementar la cuenta:

    SET CacheQueueTable.MessageCount = CacheQueueTable.MessageCount +1;

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