Estensione dell'esempio di instradamento del messaggio

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.

Riutilizzo del flusso di messaggi Routing_using_memory_cache

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):

Routing_using_memory_cache.esql

E' necessario modificare le tre parti evidenziate (sezioni 1, 2 e 3) in base al messaggio che sta per essere instradato dall'ESQL:

  1. Le tre variabili ESQL: Variable1, Variable2, Variable3 vengono utilizzate dal nodo Compute per ricercare il gestore code e la coda di destinazione nella tabella database. Queste variabili possono essere protette o derivate dal messaggio in entrata. Nell'esempio, il primo valore è protetto e gli altri due sono derivati dal messaggio XML in entrata. E' opportuno che il primo valore sia protetto in modo che possa essere utilizzato un valore differente per ogni tipo di messaggio che potrebbe essere instradato. Così facendo, si può utilizzare una tabella database per molte serie differenti di dati di instradamento. Per creare un valore protetto, impostare il relativo valore nell'istruzione DECLARE. Nell'esempio, la Variable1 è impostata sul valore SAMPLE_QUEUES.
  2. Questa sezione nell'ESQL mostra come informazioni dal messaggio possano essere utilizzate per impostare le altre due variabili. Per un tipo o formato di messaggio differente questa parte deve essere completamente riscritta per fare riferimento ai campi nel messaggio in entrata da utilizzare per l'instradamento.
  3. Se vi sono problemi nell'impostazione delle Variabili, vengono impostati i valori predefiniti. Nell'esempio, sono impostate sul valore predefinito.

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.

Modifica dell'ambito del blocco BEGIN ATOMIC ... END;

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):

spostamento blocco begin
  1. Il blocco BEGIN ATOMIC segnala che il seguente ESQL sarà a thread singolo fino a quando non si raggiunge la corrispondente istruzione "END;".
  2. Il commento ESQL contrassegnato dal numero 4 mostra dove è possibile spostare l'istruzione "END;" se la cache non verrà aggiornata dinamicamente.
  3. L'istruzione "END;" corrente deve essere rimossa se una nuova "END;" viene collocata nell'indicatore 4 riportato sopra.

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.

Utilizzo di variabili esterne per rendere più facile la distribuzione del flusso di messaggi a sistemi differenti

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:

  1. Modificare l'ESQL in modo da dichiarare Variable1 variabile esterna. Modificare DECLARE Variable1 CHAR 'SAMPLE_QUEUES' in DECLARE Variable1 EXTERNAL CHAR 'SAMPLE_QUEUES'. L'ESQL dovrebbe essere:
    -- Sezione 1
    DECLARE Variable1 EXTERNAL CHAR 'SAMPLES_QUEUES';
    DECLARE Variable2 CHAR;
    DECLARE Variable3 CHAR;
  2. La variabile esterna ora deve essere definita al livello di flusso di messaggi. Aprire il flusso di messaggi Routing_using_memory_cache e fare clic sulla scheda Proprietà definite dall'utente alla fine dell'editor del flusso di messaggi. Creare una nuova proprietà denominata Variable1 ed impostare il relativo valore predefinito su SAMPLE_QUEUES:

    Proprietà definite dall'utente

  3. La variabile Variable1 ora è una variabile esterna. Aggiungere il flusso di messaggi ad un file bar e quindi fare clic sulla scheda Configura. Selezionare il nodo Compute nel flusso e si dovrebbe riuscire a modificare il valore della variabile:

    Editor del file bar

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).

Modifica dei criteri di aggiornamento della cache

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:

  1. Aggiornare la cache dopo un periodo di tempo specificato
  2. Aggiornare la cache dopo un numero di messaggi specificato

L'esempio può essere facilmente modificato in modo da fare uso di questi criteri. Il punto critico nell'ESQL per l'aggiornamento della cache è:

ESQL per i criteri

Per modificare i criteri di aggiornamento in modo da utilizzare un periodo di tempo di 60 secondi:

  1. Modificare i criteri indicati in rosso nell'ESQL in:

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

  2. Modificare SET CacheQueueTable.valid = true; in

    SET CacheQueueTable.LastUpDate = CURRENT_TIMESTAMP;

Per modificare i criteri di aggiornamento in modo che siano validi dopo 100 messaggi:

  1. Modificare i criteri indicati in rosso nell'ESQL in:

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

  2. Modificare SET CacheQueueTable.valid = true; in

    SET CacheQueueTable.MessageCount = 0;

  3. Aggiungere un'istruzione alla fine del modulo ESQL per incrementare il conteggio:

    SET CacheQueueTable.MessageCount = CacheQueueTable.MessageCount +1;

icona Pagina principale   Torna alla pagina home dell'esempio