Il flusso di messaggi di esempio comprende due nodi SCADAInput configurati per l'ascolto su due diverse porte TCP/IP. Quando un messaggio viene ricevuto senza errori, il nodo di input lo propaga ad un nodo Compute che manipola il contenuto del messaggio di input e genera un certo numero di messaggi di output. Il nodo Compute propaga i messaggi di output ad un nodo Publication che li pubblica per i sottoscrittori registrati che utilizzano il protocollo WebSphere MQ. Gli errori nel flusso vengono propagati ad un nodo MQOutput, che registra i messaggi di errore in una coda per la successiva elaborazione.
I client Telemetry generano eventi, ad esempio per indicare una modifica di stato o per confermare che sono ancora attivi. I client sono programmati per eseguire il batch di eventi e per inviarli al broker ogni 15 minuti. Il flusso di messaggi è progettato per estrarre singoli messaggi di evento dal messaggio batch e pubblicarli.
Il nodo Compute è stato configurato con la suddivisione del messaggio di input in batch in singoli messaggi di evento mediante ESQL. Un loop WHILE ripete ciascun messaggio nel batch. MQMD viene copiato dal messaggio di input in ciascun messaggio di output. I campi rilevanti vengono copiati dalla struttura ad albero di input nella struttura ad albero di output. Ciascun messaggio di output è un messaggio JMSText creato impostando le proprietà utente nella cartella usr all'interno dell'intestazione MQRFH2. Ciascun messaggio viene trasmesso al nodo Publication da un'istruzione PROPAGATE.
Di seguito viene riportato un messaggio batch di input di esempio in cui sono presenti due eventi:
<?xml version="1.0" encoding="UTF-8"?> <!-- edited by Mary Bright --> <events d_tstamp="20040417103118"> <StateChange topic="LCUnit/12345/StateChange" d_tstamp="20040417104439" i_state="1" i_old_state="0"> <![CDATA[Changing state from 'Starting' to 'Payload' because 'The startup routine is complete']]> </StateChange> <Heartbeat topic="LCUnit/12345/Heartbeat" d_tstamp="20040417105126" i_state="1"> <d_tstamp>20040417104948</d_tstamp> <i_state>1</i_state> </Heartbeat> </events>
Di seguito viene descritto il modulo ESQL che elabora i messaggi di questo formato:
CREATE COMPUTE MODULE messageflow_Compute CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN DECLARE BatchTime CHAR; SET BatchTime = InputRoot.XML.events.d_tstamp; DECLARE Count INTEGER CARDINALITY(InputRoot.XML.events.*[]); DECLARE I INTEGER 2; WHILE I <= Count DO SET OutputRoot.Properties.MessageDomain = 'XML'; SET OutputRoot.XML = NULL; SET OutputRoot.MQMD = InputRoot.MQMD; SET OutputRoot.MQRFH2.CodedCharSetId = 1208; SET OutputRoot.MQRFH2.(MQRFH2.Field)Format = 'MQSTR '; SET OutputRoot.MQRFH2.(MQRFH2.Field)NameValueCCSID = 1208; SET OutputRoot.MQRFH2.psc.Topic = InputRoot.XML.events.*[I].topic; SET OutputRoot.MQRFH2.usr.*[] = InputRoot.XML.events.*[I].(XML.Attribute)*[]; SET OutputRoot.MQRFH2.usr.b_time = BatchTime; SET OutputRoot.XML.Body.Text = InputRoot.XML.events.*[I].(XML.CDataSection)*' SET I = I + 1; PROPAGATE; END WHILE; RETURN FALSE; END; END MODULE;
Il flusso di messaggi dispone di due nodi di input per aumentare la capacità di gestione del messaggio. E' possibile utilizzare un numero qualsiasi di nodi di input. E' inoltre possibile modificare la proprietà di flusso del messaggio Istanze aggiuntive per aumentare il numero di elaborazioni che gestiscono il flusso di messaggi. Se si dispone di molte centinaia di client, è possibile che vi sia un carico elevato di messaggi su due o più broker. Utilizzare una o più di queste tecniche per individuare il livello accettabile di elaborazione del messaggio.
Nell'esempio viene descritta una sola modalità di gestione dei messaggi del client Telemetry. Modificare il flusso di messaggi o crearne uno nuovo per soddisfare le richieste di Telemetry.