Der ESQL-Code des Beispielprogramms 'Nachrichtenrouting' wurde so gestaltet, dass er mit nur wenigen Änderungen auch in anderen Nachrichtenflüssen verwendet werden kann.
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):
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:
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.
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):
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.
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:
-- Section 1
DECLARE Variable1 EXTERNAL CHAR 'SAMPLES_QUEUES';
DECLARE Variable2 CHAR;
DECLARE Variable3 CHAR;
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).
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:
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:
So legen Sie als Aktualisierungsbedingung ein Zeitintervall von 60 Sekunden fest:
IF CacheQueueTable.LastUpDate is null or (CURRENT_TIMESTAMP - CacheQueueTable.LastUpDate) second > INTERVAL '60' SECOND THEN
SET CacheQueueTable.LastUpDate = CURRENT_TIMESTAMP;
So legen Sie fest, dass der Cache nach 100 Nachrichten aktualisiert wird:
IF CacheQueueTable.MessageCount is null or CacheQueueTable.MessageCount > 100 SECOND THEN
SET CacheQueueTable.MessageCount = 0;
SET CacheQueueTable.MessageCount = CacheQueueTable.MessageCount +1;