Sie können den ESQL-Code des Mustercodes 'Message Routing' ändern, sodass sie ihn auch in anderen Nachrichtenflüssen verwenden können.
Die ESQL-Datei Routing_using_database_and_memory_cache enthält den gesamten ESQL-Code, der in der zwischengespeicherten Version des Mustercodes verwendet wird. Öffnen Sie diese Datei und suchen Sie nach folgendem Abschnitt (Section 1 in der ESQL-Datei):
Die drei hervorgehobenen Abschnitte (Section 1, 2 und 3) müssen abhängig von der Nachricht, die mithilfe der ESQL-Datei weitergeleitet werden soll, geändert werden:
Wenn Sie den ESQL-Code wiederverwenden, um eine Routing-Funktion in einem anderen Nachrichtenfluss bereitzustellen, können Sie den übrigen ESQL-Code unverändert lassen. 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 Mustercode im Nachrichtenbrokerprojekt bereitgestellt wird.
Bei Verwendung der ESQL-Datei müssen Sie sicherstellen, dass in den Eigenschaften des Rechenknotens für Rechenmodus einer der folgenden Werte festgelegt wird, da die Routing-Informationen ansonsten verloren gehen:
Außerdem muss der ODBC-Quellenname der Datenbank im Feld Datenquelle 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 dann wichtig, wenn der Cache dynamisch aktualisiert wird. Wenn hingegen festgelegt wird, dass der Cache nicht aktualisiert zu werden braucht, solange der Nachrichtenfluss besteht, können Sie den Geltungsbereich des atomaren Blocks so reduzieren, dass er nur die Initialisierung des Cache abdeckt. Im folgenden Diagrammist die aktuelle ESQL-Datei dargestellt (unter der Überschrift 'Section 4' in der ESQL-Datei):
Nachdem diese Änderung abgeschlossen wurde, ist 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, sodass sie zum Zeitpunkt des Einsatzes geändert werden können. Dies bedeutet, dass der Nachrichtenfluss zum Zeitpunkt der Implementierung an die Umgebung, in der er implementiert wird, angepasst werden kann, ohne dass der ESQL-Code des Nachrichtenflusses geändert werden muss.
Im Nachrichtenfluss 'Routing_using_database_and_memory_cache' wird die Variable 'Variable1' für die Suche in der Datenbank verwendet; sie ist fest codiert mit dem Wert SAMPLE_QUEUES. Diese Variable muss zum Zeitpunkt der Implementierung ausgelagert werden, damit ihr Wert in Abhängigkeit von dem System, auf dem die Implementierung ausgeführt wird, geändert werden kann. Auf diese Weise können Sie für jedes System eine andere Kombination aus Warteschlangen und WS-Manager, aber immer dieselbe Datenbanktabelle verwenden.
Gehen Sie folgendermaßen vor, um 'Variable1' zu einer externen Variable zu machen:
DECLARE Variable1 CHAR 'SAMPLE_QUEUES'in
DECLARE Variable1 EXTERNAL CHAR 'SAMPLE_QUEUES'Der ESQL-Code muss wie in folgendem Beispiel aussehen:
-- 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 andere Parameter für 'Variable1' enthält, neue Einträge erstellt werden. Wenn der Nachrichtenfluss implementiert wird, ohne dass der Wert von 'Variable1' geändert wird, funktioniert er wie zuvor. (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 den Mustercode 'Message Routing':
Es ist hilfreich, wenn andere Bedingungen für eine Aktualisierung des Cache festgelegt werden. Möglich sind folgende Bedingungen:
Der Mustercode lässt sich so ändern, dass jede dieser Bedingungen verwendet werden kann. Folgende Stellen im ESQL-Code sind für die Aktualisierung des Cache wichtig:
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.valid = true;in
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.valid = true;in
SET CacheQueueTable.MessageCount = 0;
SET CacheQueueTable.MessageCount = CacheQueueTable.MessageCount +1;