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.
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):
Deberá cambiar las tres partes resaltadas (secciones 1, 2 y 3) basándose en el mensaje que va a direccionar el ESQL:
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.
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):
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.
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:
-- Section 1
DECLARE Variable1 EXTERNAL CHAR 'SAMPLES_QUEUES';
DECLARE Variable2 CHAR;
DECLARE Variable3 CHAR;
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).
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:
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:
Para cambiar el criterio de renovación de forma que se utilice un periodo de tiempo de 60 segundos:
IF CacheQueueTable.LastUpDate is null or (CURRENT_TIMESTAMP - CacheQueueTable.LastUpDate) second > INTERVAL '60' SECOND THEN
SET CacheQueueTable.LastUpDate = CURRENT_TIMESTAMP;
Para cambiar el criterio de renovación para que sea verdadero (true) tras 100 mensajes:
IF CacheQueueTable.MessageCount is null or CacheQueueTable.MessageCount > 100 SECOND THEN
SET CacheQueueTable.MessageCount = 0;
SET CacheQueueTable.MessageCount = CacheQueueTable.MessageCount +1;