L'esempio ESQL di instradamento del messaggio è progettato in modo tale che possa essere modificato per essere utilizzato in altri flussi di messaggi con pochissime modifiche.
Il file ESQL Routing_using_memory_cache contiene tutti gli ESQL utilizzati nella versione dell'esempio memorizzata nella cache. Aprire questo file e trovare la seguente sezione (contrassegnata come Sezione 1 nell'ESQL):
E' necessario modificare le tre parti evidenziate (sezioni 1, 2 e 3) in base al messaggio che sta per essere instradato dall'ESQL:
E' possibile lasciare invariato il resto dell'ESQL quando si riutilizza per fornire capacità di instradamento in un altro flusso di messaggi. La tabella del database deve essere aggiornata con ogni nuova voce richiesta dal nuovo flusso. Visualizzare lo script del database setupRoutingDatabase che viene fornito con l'esempio nel progetto flusso di messaggi.
La cosa importante da fare quando si utilizza l'ESQL è assicurarsi che la modalità nelle proprietà del nodo Compute sia impostata su uno dei seguenti valori, altrimenti le informazioni sull'instradamento andranno perse:
Deve essere aggiunto anche il nome origine ODBC del database alle proprietà del nodo Compute.
L'istruzione BEGIN ATOMIC ... END; viene utilizzata nel flusso di messaggi Routing_using_memory_cache per assicurarsi che un solo thread alla volta usi la cache della memoria. La limitazione ad un singolo thread in questa parte dell'ESQL è importante solo se la cache verrà aggiornata automaticamente. Se viene stabilito che la cache non deve essere aggiornata per la durata del flusso di messaggi, l'ambito del blocco atomico può essere ridotto alla sola copertura dell'inizializzazione della cache. La figura che segue mostra l'ESQL corrente (indicato come Sezione 4 nell'ESQL):
Una volta apportata questa modifica, la ricerca del nome coda nella cache non sarà più a thread singolo. Più messaggi differenti potranno essere letti dalla cache contemporaneamente.
Variabili esterne consentono a valori protetti nei flussi di messaggi di essere portati al livello di flusso di messaggi in modo da poter essere modificati al momento della distribuzione. Il flusso di messaggi infatti può essere personalizzato al momento della distribuzione nell'ambiente di destinazione senza dover modificare l'ESQL del flusso di messaggi.
Il flusso di messaggi Routing_using_memory_cache dispone di una variabile denominata
Variable1, utilizzata per eseguire la ricerca nel database. Essa è protetta
nel valore SAMPLE_QUEUES
.
E' ragionevole che questa variabile venga resa esterna al momento della distribuzione
in modo che il relativo valore possa essere modificato a seconda del sistema in cui viene
distribuito. In questo modo sarà possibile utilizzare una serie differente di code e
gestori code
per ogni sistema, ma sarà ancora possibile utilizzare la stessa tabella database.
Per rendere Variable1 una variabile esterna:
-- Sezione 1
DECLARE Variable1 EXTERNAL CHAR 'SAMPLES_QUEUES';
DECLARE Variable2 CHAR;
DECLARE Variable3 CHAR;
Per utilizzare questa variabile esterna è necessario eseguire nuove immissioni nella tabella ROUTING_TABLE del database ROUTING che ha differenti parametri Variable1. Se il flusso viene distribuito senza modificare il valore di Variable1, dovrebbe funzionare come prima. (Variable1 dovrebbe avere come valore predefinito SAMPLE_QUEUES).
I criteri di aggiornamento correnti per la cache dell'esempio di instradamento del messaggio della tabella database sono:
Sarebbe utile se si potessero utilizzare altri criteri per decidere quando aggiornare la cache. Possibili criteri potrebbero essere:
L'esempio può essere facilmente modificato in modo da fare uso di questi criteri. Il punto critico nell'ESQL per l'aggiornamento della cache è:
Per modificare i criteri di aggiornamento in modo da utilizzare un periodo di tempo di 60 secondi:
IF CacheQueueTable.LastUpDate is null or (CURRENT_TIMESTAMP - CacheQueueTable.LastUpDate) second > INTERVAL '60' SECOND THEN
SET CacheQueueTable.LastUpDate = CURRENT_TIMESTAMP;
Per modificare i criteri di aggiornamento in modo che siano validi dopo 100 messaggi:
IF CacheQueueTable.MessageCount is null or CacheQueueTable.MessageCount > 100 SECOND THEN
SET CacheQueueTable.MessageCount = 0;
SET CacheQueueTable.MessageCount = CacheQueueTable.MessageCount +1;