Mustercode 'Message Routing' mithilfe einer Datenbank ausführen
Die Ausführung des Mustercodes 'Message Routing' erfolgt in zwei getrennten Szenarios:
- Verwenden einer direkten Verbindung zur Datenbanktabelle, um die Weiterleitungsinformationen für jede verarbeitete Nachricht einzeln abzurufen
- Verwenden von gemeinsamen Variablen, um eine Kopie der Datenbanktabelle im Nachrichtenfluss zu speichern, die von jeder verarbeiteten Nachricht genutzt werden kann
Die beiden Szenarios werden einzeln beschrieben. Alle in diesem Abschnitt
verwendeten Testnachrichten sind im Verzeichnis Test messages
(Testnachrichten) unter dem Nachrichtenbrokerprojekt Message routing sample
message flows (Nachrichtenflüsse für den Mustercode 'Message Routing') gespeichert.
Sollten bei der Ausführung des Mustercodes Probleme auftreten, lesen Sie den Abschnitt Resolving problems when running samples (Probleme beim Ausführen von Mustercodes beheben) in der WebSphere Message Broker-Dokumentation.
Alle Testnachrichten, die beim Ausführen dieses Mustercodes verwendet werden,
basieren auf folgendem Format:
<SaleEnvelope>
<Header>
<SaleListCount>1</SaleListCount>
</Header>
<SaleList>
<Invoice>
<Initial>T</Initial>
<Initial>D</Initial>
<Surname>Montana</Surname>
<Item><Code>00</Code>
<Code>01</Code><Code>02</Code>
<Description>Twister</Description>
<Category>Games</Category>
<Price>00.30</Price>
<Quantity>01</Quantity>
</Item>
<Item>
<Code>02</Code><Code>03</Code><Code>01</Code>
<Description>The Times Newspaper</Description>
<Category>Books and Media</Category>
<Price>00.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>00.50</Balance>
<Currency>Sterling</Currency>
</Invoice>
</SaleList>
<Trailer>
<CompletionTime>12.00.00</CompletionTime>
</Trailer>
</SaleEnvelope>
Die Felder Initial und
Surname werden für die Weiterleitung der
Nachricht verwendet.
Mustercode ausführen
Eine direkte Verbindung zur Datenbanktabelle zum Weiterleiten der Nachricht
verwenden
Für diesen Teil des Mustercodes wird der Nachrichtenfluss
'Routing_using_database_table' verwendet. Der Nachrichtenfluss enthält eine
Eingabewarteschlange mit dem Namen ROUTING.DATABASE.IN1. Der Nachrichtenfluss kann die
Nachricht an eine von 20 Ausgabewarteschlangen weiterleiten, je nachdem, was in der
Nachricht angegeben ist ('ROUTING.OUT' gefolgt von einer
Zahl zwischen 1 und 19 oder die Warteschlange
'ROUTING.DEFAULT').
Gehen Sie folgendermaßen vor, um diesen
Teil des Mustercodes auszuführen:
- Erweitern Sie in der Ansicht 'Brokerentwicklung' das Projekt
Message routing sample message flows.
Klicken Sie unter 'Flusstests' doppelt auf
Database_Direct_message1.mbtest, um die Datei im
Testclient zu öffnen.
- Klicken Sie im Testclient auf In Warteschlange einreihen und
anschließend auf Nachricht senden, um eine Nachricht an die
Warteschlange ROUTING.DATABASE.IN1 zu senden.
Der Nachrichtenfluss
leitet die Nachricht an die Warteschlange 'ROUTING.OUT1' weiter.
- Klicken Sie im Testclient auf Aus
Warteschlange entfernen und anschließend auf Nachricht
abrufen, um eine Nachricht aus der Warteschlange
ROUTING.OUT1 zu lesen.
- Doppelklicken Sie unter 'Test messages' (Testnachrichten) auf
Database_Direct_message2.mbtest, um die Datei im Testclient zu
öffnen.
- Klicken Sie im Testclient auf In Warteschlange
einreihen und anschließend auf Nachricht senden, um
die Nachricht an die Warteschlange ROUTING.DATABASE.IN1 zu
senden.
Der Nachrichtenfluss leitet die Nachricht an die Warteschlange
ROUTING.OUT19 weiter.
- Klicken Sie im Testclient auf Aus Warteschlange
entfernen und anschließend auf Nachricht abrufen,
um eine Nachricht aus der Warteschlange ROUTING.OUT19 zu
lesen.
Wenn alle zuvor beschriebenen Schritte erfolgreich ausgeführt wurden, ist der erste
Teil des Mustercodes damit beendet. Sie können den ESQL-Code im Nachrichtenfluss Routing_using_database_table_Compute anzeigen, um nachzuvollziehen, wie die Weiterleitung programmiert ist.
Eine zwischengespeicherte Version der Datenbanktabelle zum Weiterleiten der Nachricht verwenden
Für diesen Teil des Mustercodes wird der Nachrichtenfluss
Routing_using_memory_cache verwendet.
Er enthält die beiden Eingabewarteschlangen ROUTING.DATABASE.MEMORY.IN1 und ROUTING.REFRESH.IN1.
Der Nachrichtenfluss kann die
Nachricht an eine von 20 Warteschlangen weiterleiten, je nachdem, was in der
Nachricht angegeben ist (ROUTING.OUT gefolgt von einer
Zahl zwischen 1 und 19 oder die Warteschlange
ROUTING.DEFAULT). Die Weiterleitungslogik ist mit der Logik bei Verwendung der nicht zwischengespeicherten Version identisch. Der Unterschied besteht darin, dass die Datenbank mithilfe gemeinsamer Variablen zwischengespeichert wird. Führen Sie folgende Schritte aus, um diesen Teil des Mustercodes auszuführen:
- Erweitern Sie in der Ansicht 'Brokerentwicklung' das Projekt
Message routing sample message flows.
Doppelklicken Sie unter 'Test messages' (Testnachrichten) auf
Database_Memory_cache_message1.mbtest, um die Datei im Testclient zu
öffnen.
- Klicken Sie im Testclient auf In Warteschlange einreihen und
anschließend auf Nachricht senden, um die Nachricht in die
Warteschlange ROUTING.DATABASE.MEMORY.IN1 zu schreiben.
- Klicken Sie im Testclient auf Aus Warteschlange
entfernen und anschließend auf Nachricht abrufen,
um die Nachricht aus der Warteschlange ROUTING.OUT1
abzurufen.
- Doppelklicken Sie unter 'Test messages' (Testnachrichten) auf
Database_Memory_cache_message2.mbtest, um die Datei im Testclient zu
öffnen.
- Klicken Sie im Testclient auf In Warteschlange einreihen und
anschließend auf Nachricht senden, um die Nachricht in die
Warteschlange ROUTING.DATABASE.MEMORY.IN1 zu schreiben.
- Klicken Sie im Testclient auf Aus Warteschlange
entfernen und anschließend auf Nachricht abrufen,
um die Nachricht aus der Warteschlange ROUTING.OUT19
abzurufen.
- Bis zu diesem Punkt weist der Nachrichtenfluss genau dieselbe Funktionalität auf,
wie der Nachrichtenfluss im ersten Teil des Mustercodes, obwohl in diesem
Nachrichtenfluss eine zwischengespeicherte Version der Datenbanktabelle verwendet wird. Um die Auswirkungen bei Verwendung des Caches zu verdeutlichen, wird die Datenbanktabelle
geändert, um zu zeigen, wie die Cache-Version aktualisiert werden kann. So ändern Sie
die Datenbanktabelle für Ihre Datenbank:
DB2
- Führen Sie folgenden Befehl aus:
- Unter Windows: Geben Sie in einem DB2-Befehlsfenster folgenden Befehl ein:
db2cmd
- Unter Linux: Geben Sie in einem Terminalfenster folgenden Befehl ein:
db2
- Stellen Sie eine Verbindung zur Datenbank
'ROUTING' her:
DB2> connect to ROUTING user Benutzer using Kennwort
Dabei ist Benutzer ein Benutzer mit Zugriffsberechtigung für die Datenbank
'ROUTING' (normalerweise ist dies derselbe Benutzer, der zum Erstellen des
Brokers für den Mustercode verwendet wurde) und Kennwort ist das
zugehörige Kennwort des Benutzers.
- Ändern Sie den letzten Eintrag in der Tabelle 'routing_table' in
Nachricht senden an ROUTING.OUT18:
DB2> update routing_table set
queue_name='ROUTING.OUT18' where Variable3='Braithwaite'
- Trennen Sie die Verbindung zur Datenbank ROUTING:
DB2> disconnect ROUTING
Oracle
- Geben Sie in einem Befehlsfenster folgenden Befehl ein:
sqlplus <Benutzer>/<Kennwort>
Dabei ist Benutzer ein Benutzer mit Zugriffsberechtigung für die Tabelle
'routing_table' (normalerweise ist dies derselbe Benutzer, der zum Erstellen des
Brokers für den Mustercode verwendet wurde) und Kennwort ist das
zugehörige Kennwort des Benutzers.
- Aktualisieren Sie den letzten Eintrag in der Tabelle 'routing_table', sodass die
Nachricht an die Warteschlange ROUTING.OUT18 gesendet wird:
update routing_table set queue_name='ROUTING.OUT18' where Variable3='Braithwaite';
- Doppelklicken Sie auf Database_Memory_cache_message2.mbtest, um
die Datei im Testclient zu öffnen.
- Klicken Sie im Testclient auf In Warteschlange einreihen und
anschließend auf Nachricht senden, um die Nachricht in die
Warteschlange ROUTING.DATABASE.MEMORY.IN1 zu schreiben.
- Klicken Sie im Testclient auf Aus Warteschlange
entfernen und anschließend auf Nachricht abrufen,
um die Nachricht aus der Warteschlange ROUTING.OUT19
abzurufen.
Die Nachricht wird nicht an den neuen Warteschlangennamen weitergeleitet, weil die
Datenbanktabelle noch nicht erneut gelesen wurde.
- Damit der Nachrichtenfluss die Datenbank erneut liest, öffnen Sie unter 'Test messages'
(Testnachrichten) die Datei Database_Refresh_cache_message1.mbtest,
klicken Sie auf In Warteschlange einreihen und anschließend auf
Nachricht senden, um die Nachricht in die Warteschlange
ROUTING.DATABASE.REFRESH.IN1 zu schreiben.
- Klicken Sie doppelt auf die Datei Database_Memory_cache_message2.mbtest, um sie im Testclient zu öffnen, und klicken Sie auf In Warteschlange einreihen und anschließend auf Nachricht senden, um die Nachricht in die Warteschlange ROUTING.DATABASE.MEMORY.IN1 zu schreiben.
- Klicken Sie im Testclient auf Aus Warteschlange entfernen und
anschließend auf Nachricht abrufen, um die weitergeleitete Nachricht
aus der Warteschlange ROUTING.OUT18 zu lesen.
Die Schritte 9 bis 14 können wiederholt werden, wobei für das Attribut 'queue_name' in der
Datenbank jeweils einer der anderen verfügbaren Warteschlangennamen angegeben wird. Statt die
Nachricht Database_Refresh_cache_message1 zu senden, können Sie auch
den Nachrichtenfluss stoppen und erneut starten, was ebenfalls dazu führt, dass die
zwischengespeicherte Datenbanktabelle aktualisiert wird.
Wenn alle vorherigen Schritte erfolgreich ausgeführt wurden, ist der Mustercode beendet. Um
nachzuvollziehen, wie die Datenbank in gemeinsamen Variablen gespeichert wird, schauen Sie sich den
ESQL-Code im Nachrichtenfluss an (siehe
Routing_using_database_and_memory_cache_Compute).
Erläuterung der Ergebnisse
Der Mustercode 'Message Routing' leitet die Eingabetestnachricht an verschiedene
Ausgabewarteschlangen weiter, ohne die Ausgabe zu verändern.
Die Ausgabenachricht ist mit
der Eingabetestnachricht identisch (siehe Eingabetestnachricht).
In den in beiden Szenarios beschriebenen Schritten wird genau gesagt, wohin die Nachrichten
weitergeleitet werden.
Mithilfe des WebSphere MQ-Explorer sowie mit der
Funktion 'Aus Warteschlange entfernen' im Testclient kann überprüft werden, ob die
Nachrichten an die richtigen Warteschlangen weitergeleitet wurden.
Zurück zum Beginn des Mustercodes