Informationen zum Mustercode 'Message Routing'

Der Mustercode 'Message Routing' zeigt, wie Sie in einer Datenbanktabelle oder Datei Informationen speichern können, mit deren Hilfe ein Nachrichtenfluss Nachrichten an WebSphere MQ-Warteschlangen weiterleiten kann. Diese Vorgehensweise ist eine alternative Methode zum Erstellen fest codierter Weiterleitungsinformationen im Rechenknoten eines Nachrichtenflusses.

In WebSphere Message Broker stellen eine Datenbanktabelle oder eine Datei zwei Möglichkeiten zum Speichern jeglicher Art von Routing- oder Umsetzungsdaten dar. Sie bieten folgende Vorteile:

Ein Problem bei der Verwendung von Datenbanken oder Dateien zum Speichern dieser Informationen ist der Leistungsverlust, der dadurch entsteht, dass bei jeder im Nachrichtenfluss weitergegebenen Nachricht auf die Datenbank oder Datei zugegriffen werden muss.

Um dieses Problem zu beheben, können gemeinsame Variablen verwendet werden. 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 in der WebSphere Message Broker-Dokumentation unter DECLARE-Anweisung. Bei Verwendung gemeinsamer Variablen können Informationen aus Datenbanktabellen oder Dateien intern in einem Nachrichtenfluss gespeichert werden. Dadurch entfällt der ständige Zugriff auf die Datenbanktabelle oder Datei und es ergeben sich alle Vorteile der Verwendung einer Datenbanktabelle oder Datei, ohne dass ein Leistungsverlust in Kauf genommen werden muss. Ein Nachteil ist jedoch, das Änderungen an der Datenbanktabelle oder Datei nicht sofort im Cache nachvollzogen werden. Damit solche Änderungen sofort berücksichtigt werden, muss entweder der Nachrichtenfluss neu gestartet oder dem Nachrichtenfluss ein Aktualisierungsmechanismus hinzugefügt werden.

Der Mustercode 'Message Routing' zeigt, wie Sie eine Datenbanktabelle oder Datei zum Weiterleiten von Nachrichten in einem Nachrichtenfluss verwenden können und wie ein Nachrichtenfluss gemeinsame Variablen zum Speichern der Datenbanktabelle oder Datei nutzen kann. Darüber hinaus wird gezeigt, wie Sie die zwischengespeicherte Datenbanktabelle durch erneutes Starten des Nachrichtenflusses oder durch Senden einer Aktualisierungsnachricht an den Nachrichtenfluss aktualisieren können.

Nachrichtenweiterleitung mithilfe einer Datenbank

Nachrichtenfluss 'Routing_using_database_table'

Dieser einfach aufgebaute Nachrichtenfluss liest eine Nachricht aus einer WebSphere MQ-Warteschlange, erstellt basierend auf den Daten in einer 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_database_and_memory_cache'

Dies ist ein Beispiel dafür, wie eine Nachricht mithilfe 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 dieselben Funktionen 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_database_and_memory_cache'

Nachrichtenweiterleitung mithilfe einer Datei

In drei Szenarios wird gezeigt, wie Nachrichten über den Knoten 'FileRead' weitergeleitet werden. Im ersten wird eine Datei im XML-Format verwendet und im zweiten und dritten eine Datei mit durch Kommas getrennten Werten (CSV-Datei). Bei den gezeigten Formaten handelt es sich um Beispiel. Sie können jedes beliebige Dateiformat verwenden, egal ob die gesamte Datei eingelesen oder ein einzelner Datensatz aus der Datei ausgewählt wird.

Nachrichtenfluss 'Routing_using_whole_file'

Dieser Nachrichtenfluss liest eine Nachricht aus einer WebSphere MQ-Warteschlange. Anschließend wird die gesamte Datei eingelesen und auf der Basis des Inhalts der Datei eine Zieladressenliste erstellt. In diesem Szenario handelt es sich um eine Datei im XML-Format. Die Nachrichten werden an die Einträge in der Zieladressenliste weitergeleitet.

Nachrichtenfluss 'Routing_using_whole_file'

Nachrichtenfluss 'Routing_using_records_file'

Der Knoten 'FileRead' in diesem Mustercode verwendet einen XPath-Ausdruck, um abhängig von einem Schlüssel in der eingehenden Nachricht den richtigen Datensatz in der Datei zu finden. Die Datei in diesem Szenario enthält Datensätze in einem CSV-Format. Jeder Datensatz in der Datei wird anhand eines Nachrichtensatzes modelliert. Die Routing-Informationen aus dem Datensatz werden direkt in die Empfängerdatenliste kopiert, um direkt vom MQOutput-Knoten verwendet zu werden. Deshalb ist keine weitere Verarbeitung (z. B. durch einen Compute-Knoten) erforderlich.

Nachrichtenfluss 'Routing_using_records_file'

Nachrichtenfluss 'Routing_using_file_and_memory_cache'

Dieser Nachrichtenfluss erweitert den vorherigen, indem er zeigt, wie gemeinsame ESQL-Variablen zum Zwischenspeichern von Informationen aus der Datei verwendet werden. Der Cache in Form der gemeinsamen Variablen wird durch einen zusätzlichen, untergeordneten Nachrichtenfluss aktualisiert.

Nachrichtenfluss 'Routing_using_file_and_memory_cache'

Auf der Ergebnisregisterkarte des Knotens 'FileRead' können drei XPath-Ausdrücke festgelegt werden:

Eigenschaft Ausdruck Erläuterung
Position für Ergebnisdaten $ResultRoot/MRM/data Aus dem ausgewählten Datensatz wird dieses Feld im Datensatz zur Aufbereitung der Nachricht verwendet. Der Inhalt des Feldes wird an die Position für Ausgabedaten kopiert.
Position für Ausgabedaten $OutputLocalEnvironment/Destination/MQ
Datensatzauswahlausdruck (concat(
$InputRoot/XMLNSC/SaleEnvelope/SaleList/Invoice/Initial[1],
$InputRoot/XMLNSC/SaleEnvelope/SaleList/Invoice/Initial[2]
) = $ResultRoot/MRM/Initial )
AND
($InputRoot/XMLNSC/SaleEnvelope/SaleList/Invoice/Surname = $ResultRoot/MRM/Surname)
Der erste Teil des Ausdrucks verkettet die beiden Initialen in der Nachricht. In den zweiten Teil des Ausdrucks wird der Nachname (Surname) aus der Nachricht übernommen. Der Datensatz, der den Initialen und dem Nachnamen entspricht, wird weitergeleitet.

Testnachricht

Die Testnachricht, die zur Steuerung des Mustercodes 'Message Routing' verwendet wird, ist eine 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 zur Suche nach der Zielwarteschlange für die einzelnen Kunden verwendet.

Datenbanktabelle zur Weiterleitung der XML-Rechnungsnachricht

Die beiden Nachrichtenflüsse in diesem Mustercode 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. Die Spalten werden in der folgenden Tabelle gezeigt:

Spalte Description
Variable1 Die erste Variable für die Suche nach der Zielwarteschlange (ist im Mustercode fest codiert und wird nicht aus der XML-Nachricht abgeleitet)
Variable2 Die zweite Variable für die Suche nach der Zielwarteschlange (wird mithilfe des Feldes Initial aus der XML-Nachricht abgeleitet)
Variable3 Die dritte Variable für die Suche nach der Zielwarteschlange (wird mithilfe des Feldes Surname aus der XML-Nachricht abgeleitet)
Queue_manager Name des Zielwarteschlangenmanagers
Queue_name 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, sodass die Tabelle für unterschiedliche Weiterleitungsnachrichten erneut verwendet werden kann. Wenn hingegen eine direkte Verknüpfung zwischen der Datenbanktabelle und der XML-Nachricht besteht und dieselbe Tabelle von verschiedenen Knoten verwendet wird, kann die erste Variable für die Unterscheidung zwischen den einzelnen Knoten verwendet werden.

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

Wie der Inhalt der Datenbank des Mustercodes angezeigt wird, hängt von dem Datenbankprodukt ab, das installiert ist. Verwenden Sie für DB2-Datenbanken die Tools, die von DB2 bereitgestellt werden, z. B. die DB2-Steuerzentrale.

Datei zur Weiterleitung der XML-Rechnungsnachricht

Nachrichtenfluss 'Routing_using_whole_file'

In diesem Nachrichtenfluss werden zwei XML-Dateien verwendet. Beide haben die gleiche Struktur, eine enthält jedoch mehrere Zieladressen für die Nachricht. Die XML-Datei besteht aus zwei Elementen:

Nachrichtenflüsse 'Routing_using_records_file' und 'Routing_using_file_and_memory_cache'

Diese Nachrichtenflüsse verwenden eine CSV--Datei. Die Datei enthält mehrere Datensätze, von denen jeder aus vier Elementen besteht:

Jeder Compute-Knoten der Nachrichtenflüsse enthält detaillierte ESQL-Kommentare, in denen genau erläutert wird, was zum Erreichen des erforderlichen Verhaltens getan wurde:

Nachrichtensatz für Weiterleitung mithilfe von Datensätzen aus einer Datei

Die Abbildung unten zeigt den Nachrichtensatz, der für die Nachrichtenflüsse 'Routing_using_records_file' und 'Routing_using_file_memory_cache' verwendet wird.

Nachrichtensatz

Im Nachrichtensatz können Sie jedes der Felder sehen, die in der CSV-Datei angezeigt werden. Das Element 'DestinationData' wird einmal für jede Zielwarteschlange wiederholt, an die die Nachricht gesendet werden soll.

Zurück zum Beginn des Mustercodes