Mustercode 'Message Routing' mithilfe einer Datenbank ausführen

Die Ausführung des Mustercodes 'Message Routing' erfolgt in zwei getrennten Szenarios:

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.

Eingabetestnachrichten

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:

  1. 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.
  2. 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.
  3. Klicken Sie im Testclient auf Aus Warteschlange entfernen und anschließend auf Nachricht abrufen, um eine Nachricht aus der Warteschlange ROUTING.OUT1 zu lesen.
  4. Doppelklicken Sie unter 'Test messages' (Testnachrichten) auf Database_Direct_message2.mbtest, um die Datei im Testclient zu öffnen.
  5. 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.
  6. 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:

  1. 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.
  2. 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.
  3. Klicken Sie im Testclient auf Aus Warteschlange entfernen und anschließend auf Nachricht abrufen, um die Nachricht aus der Warteschlange ROUTING.OUT1 abzurufen.
  4. Doppelklicken Sie unter 'Test messages' (Testnachrichten) auf Database_Memory_cache_message2.mbtest, um die Datei im Testclient zu öffnen.
  5. 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.
  6. Klicken Sie im Testclient auf Aus Warteschlange entfernen und anschließend auf Nachricht abrufen, um die Nachricht aus der Warteschlange ROUTING.OUT19 abzurufen.
  7. 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:
  8. Doppelklicken Sie auf Database_Memory_cache_message2.mbtest, um die Datei im Testclient zu öffnen.
  9. 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.
  10. 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.
  11. 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.
  12. 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.
  13. 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