Informationen zum Beispielprogramm 'Nachrichtenrouting'

Anhand des Beispielprogramms 'Nachrichtenrouting' wird veranschaulicht, wie in einer Datenbanktabelle Routingdaten gespeichert werden können, mit deren Hilfe ein Nachrichtenfluss Nachrichten an WebSphere MQ-Warteschlangen weiterleiten kann. Dies ist eine alternative Methode zum Erstellen fest codierter Weiterleitungsinformationen im Rechenknoten eines Nachrichtenflusses.

In WebSphere Message Broker wird empfohlen, eine Datenbanktabelle zum Speichern jeglicher Art von Weiterleitungs- oder Umsetzungsdaten zu erstellen. Dies hat folgende Gründe:

Das einzige Problem bei der Verwendung von Datenbanken zum Speichern dieser Informationen ist die Leistungsbeeinträchtigung, die dadurch entsteht, dass bei jeder im Nachrichtenfluss weitergegebenen Nachricht auf die Datenbank zugegriffen werden muss.

Bei niedrigeren Versionen als WebSphere Message Broker Version 6.0 musste festgelegt werden, ob Weiterleitungs- und Zuordnungsinformationen im ESQL-Code fest codiert oder eine Datenbanktabelle zum Speichern dieser Informationen verwendet werden sollte. Diese Entscheidung hing meistens davon ab, ob die Leistungseinbußen durch Verwendung der Datenbank in Kauf genommen werden konnten. Bei hohen Nachrichtenraten, wurde die feste Codierung der Informationen dem Speichern in einer Datenbanktabelle meist vorgezogen, weil es einfacher war.

In Version 6.0 wurde das Verfahren der gemeinsamen Variablen eingeführt. Bei Verwendung gemeinsamer Variablen können Sie einen Status in Nachrichtenflüssen speichern, der für alle Nachrichten, die den jeweiligen Nachrichtenfluss verwenden, verfügbar ist. Weitere Informationen zur Verwendung von gemeinsamen Variablen finden Sie unter DECLARE variables (Variablen deklarieren). Bei Verwendung gemeinsamer Variablen kann der aktuelle Stand von Datenbanktabellen in einem Nachrichtenfluss gespeichert werden. Dadurch ist der ständige Zugriff auf die Datenbanktabelle nicht mehr erforderlich, und es ergeben sich alle Vorteile wie bei der Verwendung einer Datenbanktabelle, ohne dass die Leistungseinbußen in Kauf genommen werden müssen. Dabei fehlt nur ein Vorteil: Änderungen an der Datenbanktabelle werden nicht sofort vom Cache berücksichtigt. Damit solche Änderungen sofort berücksichtigt werden, muss entweder der Nachrichtenfluss neu gestartet oder dem Nachrichtenfluss ein Aktualisierungsmechanismus hinzugefügt werden.

Das Beispielprogramm 'Nachrichtenrouting' veranschaulicht, wie eine Datenbanktabelle zum Weiterleiten von Nachrichten in einem Nachrichtenfluss verwendet werden kann, und wie ein Nachrichtenfluss gemeinsame Variablen zum Speichern der Datenbanktabelle nutzen kann. Darüber hinaus wird veranschaulicht, wie die zwischengespeicherte Datenbanktabelle durch erneutes Starten des Nachrichtenflusses oder durch Senden einer Aktualisierungsnachricht an den Nachrichtenfluss aktualisiert werden kann.

Das Beispielprogramm 'Nachrichtenrouting' enthält zwei Nachrichtenflüsse:

Nachrichtenfluss 'Routing_using_database_table'

Dies ist ein Beispiel dafür, wie eine Nachricht mit Hilfe einer Datenbanktabelle weitergeleitet wird. Dieser einfach aufgebaute Nachrichtenfluss liest eine Nachricht aus einer WebSphere MQSeries-Warteschlange, erstellt basierend auf den Daten in der Datenbanktabelle eine Zieladressenliste und leitet anschließend die Nachricht an die Einträge in der Zieladressenliste weiter.

Nachrichtenfluss 'Routing_using_database_table'

Nachrichtenfluss 'Routing_using_memory_cache'

Dies ist ein Beispiel dafür, wie eine Nachricht mit Hilfe einer zwischengespeicherten Version der Datenbanktabelle, die unter Verwendung gemeinsamer Variablen gespeichert wurde, weitergeleitet wird. Der Nachrichtenfluss enthält zwei untergeordnete Nachrichtenflüsse. Der erste untergeordnete Nachrichtenfluss hat dieselbe Funktion wie der Nachrichtenfluss 'Routing_using_database_table', verwendet jedoch im Unterschied dazu gemeinsame Variablen. Der zweite untergeordnete Nachrichtenfluss dient dazu, die gemeinsamen Speichervariablen zu aktualisieren.

Nachrichtenfluss 'Routing_using_memory_cache'

Testnachricht

Die Testnachricht, die zur Steuerung des Beispielprogramms 'Nachrichtenrouting' verwendet wird, ist eine ganz normale XML-Nachricht, die Rechnungsdaten für einen Kunden enthält.

<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 in der Datenbank bei der Suche nach der Zielwarteschlange für die einzelnen Kunden verwendet.

Datenbanktabelle zur Weiterleitung der XML-Rechnungsnachricht

Die beiden Nachrichtenflüsse in diesem Beispielprogramm verwenden dieselbe Datenbanktabelle zum Abrufen der Weiterleitungsinformationen. Die Datenbanktabelle hat fünf Spalten: Die ersten drei Spalten enthalten Suchinformationen, die aus der eingehenden Nachricht abgeleitet wurden, während die letzten beiden die Informationen zur Warteschlange und zum Warteschlangenmanager enthalten, an die die Nachricht weitergeleitet wird. Folgende Spalten sind vorhanden:

Spalte Beschreibung
Variable1 Die erste Variable für die Suche nach der Zielwarteschlange (in diesem Beispielprogramm ist sie fest codiert und wird nicht aus der XML-Nachricht abgeleitet)
Variable2 Die zweite Variable für die Suche nach der Zielwarteschlange (sie wird mit Hilfe des Feldes '<Initial>' aus der XML-Nachricht abgeleitet)
Variable3 Die dritte Variable für die Suche nach der Zielwarteschlange (sie wird mit Hilfe des Feldes '<Surname>' aus der XML-Nachricht abgeleitet)
Queue_manager Der Name des Zielwarteschlangenmanagers
Queue_name Der Name der Zielwarteschlange

Die Definition für die Datenbanktabelle wird in dem als Beispiel verwendeten Nachrichtenflussprojekt im Verzeichnis Database bereitgestellt. Die Datenbanktabelle ist nicht direkt mit der eingehenden XML-Nachricht verknüpft, so dass die Tabelle für viele verschiedene Weiterleitungsnachrichten erneut verwendet werden kann. Wenn diese Möglichkeit ausgenutzt und dieselbe Tabelle von verschiedenen Knoten verwendet wird, kann die erste Variable für die Unterscheidung zwischen den einzelnen Knoten verwendet werden.

Jeder Rechenknoten der Nachrichtenflüsse enthält detaillierte ESQL-Kommentare, in denen exakt erläutert wird, welche Schritte zum Erreichen des erforderlichen Verhaltens ausgeführt wurden:

Wie Sie den Inhalt der Datenbank des Beispielprogramms anzeigen, hängt vom installierten Datenbankprodukt ab. Verwenden Sie für DB2-Datenbanken die Tools, die von DB2 bereitgestellt werden, z. B. die DB2-Steuerzentrale. Wenn Sie kein Datenbankprodukt installiert haben, verwenden die Beispielprogramme die Datenbank 'Apache Derby'. Sie finden Anweisungen zur Anzeige von Daten in einer Derby-Datenbank unter Den Inhalt einer Derby-Datenbank anzeigen.

Symbol Hauptseite   Zurück zur Beispiel-Homepage