Puede modificar el ESQL del ejemplo de Direccionamiento de mensajes para poder utilizarlo en otros flujos de mensajes.
El archivo ESQL, Routing_using_database_and_memory_cache, contiene todo el ESQL que se utiliza 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 resaltada (secciones 1, 2 y 3) basándose en el mensaje que va a direccionar el ESQL:
Cuando se reutilice el ESQL para proporcionar prestaciones de direccionamiento en otro flujo de mensajes, puede dejar el resto del ESQL. La tabla de base de datos tiene que actualizarse con cualquier nueva entrada que requiera el nuevo flujo. Consulte el script de base de datos setupRoutingDatabase que se suministra con el ejemplo en el proyecto de Message Broker.
Cuando se utiliza el ESQL, debe asegurarse de que la Modalidad de cálculo de las propiedades del nodo Compute se ha establecido en uno de los siguientes valores, de lo contrario se perderá la información de direccionamiento:
El nombre de origen de datos ODBC de base de datos Origen de datos, también debe añadirse a las propiedades del nodo de cálculo.
La sentencia ATOMIC BEGIN... END; se utiliza en el flujo de mensajes Routing_using_memory_cache para asegurarse de que sólo una hebra utiliza la memoria caché a la vez. La restricción de una sola hebra en esta parte del ESQL sólo es importante si la memoria caché va a renovarse dinámicamente. Si ha decidido que no es necesario renovar la memoria caché durante la vida del flujo de mensajes, entonces puede reducir el ámbito atómico del bloque para cubrir únicamente la inicialización de la memoria caché. El diagrama siguiente 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 que los valores grabados en código de los flujos de mensajes se promocionen al nivel de flujo de mensajes para poder modificarlos durante 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_database_and_memory_cache tiene una variable denominada Variable1, que se utiliza para realizar la búsqueda de base de datos; es codificada en el valor QUEUES. Se debe externalizar esta variable durante el despliegue para pueda modificarse su valor en función de el sistema en que se efectúa el despliegue. Esta externalización permite utilizar distintos conjuntos de colas y gestores de colas para cada sistema, pero continúa permitiendo el uso de la misma tabla de base de datos.
Para que la Variable1 sea una variable externa:
DECLARE Variable1 CHAR 'SAMPLE_QUEUES'a
DECLARE Variable1 EXTERNAL CHAR 'SAMPLE_QUEUES'El ESQL debe ser similar al ejemplo siguiente:
-- Section 1
DECLARE Variable1 EXTERNAL CHAR 'SAMPLES_QUEUES';
DECLARE Variable2 CHAR;
DECLARE Variable3 CHAR;
Para utilizar esta variable externa, debe crear nuevas entradas en la tabla ROUTING_TABLE de la base de datos ROUTING que tenga parámetros Variable1 distintos. Si el flujo se despliega sin cambiar el valor de Variable1, funcionará como antes. (De forma predeterminada, Variable1 toma el valor SAMPLE_QUEUES).
Los criterios de renovación actuales para la memoria caché de la tabla de base de datos del ejemplo de Direccionamiento de mensajes son:
Puede ser de utilidad utilizar otros criterios para decidir cuándo renovar la memoria caché. Los posibles criterios pueden 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 los criterios de renovación para 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.valid = true;a
SET CacheQueueTable.LastUpDate = CURRENT_TIMESTAMP;
Para cambiar los criterios de renovación para que sea verdadero (true) tras 100 mensajes:
IF CacheQueueTable.MessageCount is null or CacheQueueTable.MessageCount > 100 SECOND THEN
SET CacheQueueTable.valid = true;a
SET CacheQueueTable.MessageCount = 0;
SET CacheQueueTable.MessageCount = CacheQueueTable.MessageCount +1;