Beispielprogramm 'Nachrichtenrouting' erweitern

Der ESQL-Code des Beispielprogramms 'Nachrichtenrouting' wurde so gestaltet, dass er mit nur wenigen Änderungen auch in anderen Nachrichtenflüssen verwendet werden kann.

Nachrichtenfluss 'Routing_using_memory_cache' erneut verwenden

Die ESQL-Datei Routing_using_memory_cache enthält den gesamten ESQL-Code, der für die zwischengespeicherte Version des Beispielprogramms verwendet wurde. Öffnen Sie diese Datei, und suchen Sie nach dem folgenden Abschnitt (Section 1 in der ESQL-Datei):

Routing_using_memory_cache.esql

Die drei hervorgehobenen Abschnitte (Section 1, 2 und 3) müssen basierend auf der Nachricht, die mit Hilfe der ESQL-Datei weitergeleitet werden soll, geändert werden:

  1. Die drei ESQL-Variablen 'Variable1', 'Variable2' und 'Variable3' werden vom Rechenknoten für die Suche nach dem Ziel-WS-Manager und der Zielwarteschlange in der Datenbanktabelle verwendet. Diese Variablen können entweder fest codiert oder aus der eingehenden Nachricht abgeleitet werden. In diesem Beispielprogramm ist der erste Wert fest codiert, während die anderen beiden aus der eingehenden XML-Nachricht abgeleitet werden. Es ist sinnvoll den ersten Wert fest zu codieren, so dass ein anderer Wert für alle anderen Nachrichtenarten, die womöglich weitergeleitet werden müssen, verwendet werden kann. Dadurch kann eine Datenbanktabelle für viele verschiedene Gruppen der Weiterleitungsdaten verwendet werden. Um einen fest codierten Wert zu erstellen, muss der Wert in der Anweisung DECLARE festgelegt werden. Im Beispielprogramm wird für 'Variable1' der Wert 'SAMPLE_QUEUES' festgelegt.
  2. Dieser Abschnitt in der ESQL-Datei gibt an, wie Informationen aus der Nachricht zum Festlegen der anderen beiden Variablen verwendet werden kann. Bei einem anderen Nachrichtentyp oder einem anderen Nachrichtenformat muss dieser Teil vollständig neu geschrieben und mit Verweisen auf die Felder in der eingehenden Nachricht versehen werden, die für die Weiterleitung verwendet werden.
  3. Wenn es Probleme beim Festlegen der Variablenwerte gibt, werden Standardwerte verwendet. Im Beispielprogramm werden diese auf den Wert 'default' gesetzt.

Sie können den Rest der ESQL-Datei unverändert lassen, wenn Sie die Weiterleitungsfunktion der ESQL-Datei in einem anderen Nachrichtenfluss verwenden möchten. Die Datenbanktabelle muss mit den neuen Einträgen aktualisiert werden, die für den neuen Nachrichtenfluss erforderlich sind. Weitere Informationen finden Sie im Datenbankscript 'setupRoutingDatabase', das mit dem Beispielprogramm im Nachrichtenflussprojekt bereitgestellt wird.

Bei Verwendung der ESQL-Datei muss unbedingt sichergestellt werden, dass für den Modus der Eigenschaften des Rechenknotens einer der folgenden Werte eingestellt ist, da die Weiterleitungsinformation ansonsten verloren geht:

Außerdem muss der ODBC-Quellenname der Datenbank den Eigenschaften des Rechenknotens hinzugefügt werden.

Geltungsbereich des Blocks 'BEGIN ATOMIC ... END;' ändern

Die Anweisung 'BEGIN ATOMIC ... END;' dient im Nachrichtenfluss 'Routing_using_memory_cache' dazu, sicherzustellen, dass immer nur ein Thread den Cache zu einem bestimmten Zeitpunkt verwenden kann. Die Einschränkung auf nur einen Thread in diesem Bereich der ESQL-Datei ist nur wichtig, wenn der Cache dynamisch aktualisiert wird. Wenn hingegen festgelegt wird, dass der Cache nicht aktualisiert werden muss, solange der Nachrichtenfluss besteht, kann der Geltungsbereich des atomaren Blocks so reduziert werden, dass er nur die Initialisierung des Cache abdeckt. In der folgenden Abbildung ist die aktuelle ESQL-Datei dargestellt (unter der Überschrift Section 4 in der ESQL-Datei):

moving beging block
  1. Die Anweisung BEGIN ATOMIC signalisiert, dass der folgende ESQL-Code von nur einem Thread verwendet werden darf, bis die entsprechende Anweisung "END;" erreicht wurde.
  2. Im ESQL-Kommentar Nr. '4' wird dargestellt, wohin die Anweisung "END;" verschoben werden kann, wenn der Cache nicht dynamisch aktualisiert wird.
  3. Die aktuelle Anweisung "END;" muss entfernt werden, wenn eine neue Anweisung "END;" an der Kennung '4' platziert wird.

Nachdem diese Änderung beendet ist, wird die Suche nach dem Warteschlangennamen im Cache nicht mehr nur auf einen Thread eingeschränkt. Dies bedeutet, dass mehrere verschiedene Nachrichten gleichzeitig aus dem Cache gelesen werden können.

Externe Variablen verwenden, damit der Nachrichtenfluss leichter auf unterschiedlichen Systemen eingesetzt werden kann

Bei Verwendung von externen Variablen können fest codierte Werte in Nachrichtenflüssen auf die Nachrichtenflussebene hochgestuft werden, so dass sie zum Zeitpunkt des Einsatzes geändert werden können. Dies bedeutet, dass der Nachrichtenfluss zum Zeitpunkt des Einsatzes an die Umgebung, in der er eingesetzt wird, angepasst werden kann, ohne dass der ESQL-Code des Nachrichtenflusses geändert werden muss.

Im Nachrichtenfluss 'Routing_using_memory_cache' wird die Variable 'Variable1' für die Suche in der Datenbank verwendet. Sie hat den fest codierten Wert 'SAMPLE_QUEUES'. Es ist sinnvoll, diese Variable zum Zeitpunkt des Einsatzes auszulagern, so dass deren Wert in Abhängigkeit von dem System, auf dem der Einsatz ausgeführt wird, geändert werden kann. Auf diese Weise kann dann für jedes System eine andere Kombination aus Warteschlangen und WS-Manager, aber immer dieselbe Datenbanktabelle verwendet werden.

Gehen Sie folgendermaßen vor, um 'Variable1' zu einer externen Variable zu machen:

  1. Ändern Sie die ESQL-Datei, und deklarieren Sie 'Variable1' als externe Variable. Ändern Sie dazu die Angabe 'DECLARE Variable1 CHAR 'SAMPLE_QUEUES'' in 'DECLARE Variable1 EXTERNAL CHAR 'SAMPLE_QUEUES''. Die ESQL-Datei sollte dann wie folgt aussehen:
    -- Section 1
    DECLARE Variable1 EXTERNAL CHAR 'SAMPLES_QUEUES';
    DECLARE Variable2 CHAR;
    DECLARE Variable3 CHAR;
  2. Die externe Variable muss jetzt auf Nachrichtenflussebene definiert werden. Öffnen Sie den Nachrichtenfluss 'Routing_using_memory_cache', und klicken Sie am unteren Rand des Nachrichtenflusseditors auf die Registerkarte Benutzerdefinierte Eigenschaften. Erstellen Sie eine neue Eigenschaft mit dem Namen 'Variable1' und legen Sie 'SAMPLE_QUEUES' als deren Standardwert fest:

    Benutzerdefinierte Eigenschaften

  3. Bei der Variablen 'Variable1' handelt es sich um eine externe Variable. Fügen Sie den Nachrichtenfluss einer BAR-Datei hinzu, und klicken Sie auf die Registerkarte Konfigurieren. Wählen Sie den Rechenknoten im Nachrichtenfluss aus, und ändern Sie den Wert für die Variable:

    BAR-Dateieditor

Damit Sie diese externe Variable verwenden können, müssen in der Datenbank 'ROUTING' in der Tabelle 'ROUTING_TABLE', die verschiedene Parameter für 'Variable1' enthält, neue Einträge erstellt werden. Wenn der Nachrichtenfluss eingesetzt wird, ohne das der Wert von 'Variable1' geändert wird, sollte er wie zuvor funktionieren. (Dies bedeutet, dass 'Variable1' standardmäßig den Wert 'SAMPLE_QUEUES' annimmt).

Bedingungen für die Cache-Aktualisierung ändern

Dies ist momentan die Bedingung für die Aktualisierung des Cache der Datenbanktabelle für das Beispielsprogramm 'Nachrichtenrouting':

Es wäre hilfreich, wenn andere Bedingungen für eine Aktualisierung des Cache festgelegt würden. Möglich sind folgende Bedingungen:

  1. Cache wird nach einem bestimmten Zeitraum aktualisiert
  2. Cache wird nach einer bestimmten Anzahl an Nachrichten aktualisiert

Das Beispielprogramm kann ohne großen Aufwand so geändert werden, dass neue Bedingungen verwendet werden. Hier die Stellen im ESQL-Code, die für die Aktualisierung des Cache wichtig sind:

ESQL-Code für Aktualisierungsbedingungen

So legen Sie als Aktualisierungsbedingung ein Zeitintervall von 60 Sekunden fest:

  1. Ändern Sie im ESQL-Code die rot markierten Bedingungen wie folgt:

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

  2. Ändern Sie SET CacheQueueTable.valid = true; zu

    SET CacheQueueTable.LastUpDate = CURRENT_TIMESTAMP;

So legen Sie fest, dass der Cache nach 100 Nachrichten aktualisiert wird:

  1. Ändern Sie im ESQL-Code die rot markierten Bedingungen wie folgt:

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

  2. Ändern Sie SET CacheQueueTable.valid = true; zu

    SET CacheQueueTable.MessageCount = 0;

  3. Fügen Sie am Ende des ESQL-Moduls eine Anweisung hinzu, um einen Zähler für die Nachrichten einzurichten:

    SET CacheQueueTable.MessageCount = CacheQueueTable.MessageCount +1;

Symbol für die Hauptseite   Zurück zum Beginn des Beispielprogramms