Dieser Beispielnachrichtenfluss enthält zwei SCADAInput-Knoten, die so konfiguriert sind, dass sie auf verschiedenen TCP/IP-Ports empfangsbereit sind. Wenn eine Nachricht fehlerfrei empfangen wird, gibt sie der Eingabeknoten an einen Rechenknoten weiter, der den Inhalt der Eingabenachricht bearbeitet und eine Reihe von Ausgabenachrichten generiert. Der Rechenknoten gibt die Ausgabenachrichten an einen Veröffentlichungsknoten weiter, der sie für registrierte Teilnehmer veröffentlicht, die das WebSphere MQ-Protokoll verwenden. Fehler im Nachrichtenfluss werden an einen MQOutput-Knoten weitergegeben, der die Fehlermeldungen in einer Warteschlange protokolliert, die zu einem späteren Zeitpunkt verarbeitet wird.
Die Telemetrie-Clients generieren Ereignisse, beispielsweise um eine Statusänderung anzuzeigen oder um ihre Aktivität zu bestätigen. Die Clients sind so programmiert, dass sie Ereignisse stapeln und sie alle 15 Minuten an den Broker senden. Der Nachrichtenfluss ist so konzipiert, dass er die einzelnen Ereignisnachrichten aus der Stapelnachricht extrahiert und sie veröffentlicht.
Der Rechenknoten wurde mit ESQL konfiguriert, die die gestapelte Eingabenachricht in einzelne Ereignisnachrichten trennt. Eine WHILE-Schleife iteriert über jede Nachricht im Stapel. Der MQMD wird aus der Eingabenachricht in jede Ausgabenachricht kopiert. Relevante Felder werden aus der Eingabebaumstruktur in die Ausgabebaumstruktur kopiert. Jede Ausgabenachricht ist eine JMSText-Nachricht, die erstellt wird, indem Sie die Benutzereigenschaften im Benutzerordner im MQRFH2-Header festlegen. Alle Nachrichten werden von einer PROPAGATE-Anweisung an den Veröffentlichungsknoten übermittelt.
Nachfolgend sehen Sie ein Beispiel einer Eingabestapelnachricht mit zwei Ereignissen:
<?xml version="1.0" encoding="UTF-8"?> <!-- bearbeitet von Mary Bright --> <events d_tstamp="20040417103118"> <StateChange topic="LCUnit/12345/StateChange" d_tstamp="20040417104439" i_state="1" i_old_state="0"> <![CDATA[Status wird von 'Starting' in 'Payload' geändert, da 'die Systemstartroutine beendet ist']]> </StateChange> <Heartbeat topic="LCUnit/12345/Heartbeat" d_tstamp="20040417105126" i_state="1"> <d_tstamp>20040417104948</d_tstamp> <i_state>1</i_state> </Heartbeat> </events>
Das ESQL-Modul, das Nachrichten dieses Format verarbeitet, wird nachfolgend dargestellt:
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;
Der Nachrichtenfluss hat zwei Empfangsknoten, um die Möglichkeit der Nachrichtenbehandlung zu erhöhen. Sie können beliebig viele Empfangsknoten verwenden. Zudem haben Sie die Möglichkeit, die Nachrichtenflusseigenschaft Zusätzliche Instanzen zu ändern, um die Anzahl der Nachrichtenflussprozesse zu erhöhen. Wenn Sie mehrere Hundert Clients verwenden, müssen Sie unter Umständen ein hohes Nachrichtenaufkommen auf zwei oder mehr Brokern bearbeiten. Verwenden Sie eine oder mehrere dieser Methoden, um einen annehmbaren Grad der Nachrichtenverarbeitung zu finden.
Dieses Beispiel zeigt nur eine Möglichkeit, mit der Nachrichten von Telemetrie-Clients bearbeitet werden können. Ändern Sie diesen Nachrichtenfluss oder erstellen Sie einen neuen, um Ihre eigenen Telemetrieanforderungen zu erfüllen.