Der Aggregations-Verteilernachrichtenfluss empfängt die ursprüngliche Eingabenachricht und strukturiert sie so um, dass einer Reihe von Zielanwendungen eine Reihe von Anforderungen präsentiert werden.
Der Verteiler- und der Sammelnachrichtenfluss können im selben Nachrichtenfluss enthalten sein. Sie werden es jedoch möglicherweise vorziehen, zwei separate Flüsse zu erstellen. Weitere Informationen zu den Vorteilen der Konfiguration separater Nachrichtenflüsse finden Sie
unter Aggregations-Verteilungsflüsse und -Sammlungsflüsse zuordnen.
Ein Beispiel für einen Verteilernachrichtenfluss, der in
WebSphere Message
Broker enthalten ist, finden Sie unter folgendem Link:
Informationen zu Beispielen können nur bei Verwendung des in das WebSphere Message
Broker Toolkit integrierten bzw. online verfügbaren Information Center angezeigt werden. Muster können nur ausgeführt werden, wenn das im
WebSphere Message
Broker Toolkit integrierte Information Center verwendet wird.
Gehen Sie folgendermaßen
vor, um den Verteilernachrichtenfluss zu erstellen:
- Erstellen Sie einen Nachrichtenfluss, um die Verteilungsverarbeitung zu ermöglichen. Der Abschnitt Nachrichtenflüsse erstellen enthält weitere
Informationen hierzu.
- Fügen Sie die folgenden Knoten zum Nachrichtenfluss hinzu und konfigurieren und verbinden Sie
diese dann wie beschrieben.
- Empfangsknoten
- Der Empfangsknoten (Input) empfängt eine Eingabenachricht, auf deren Basis mehrere Anforderungsnachrichten generiert werden. Bei diesem Knoten kann es sich um einen der integrierten Knoten oder um einen benutzerdefinierten Empfangsknoten handeln.
- Wählen Sie den Empfangsknoten aus, um die Ansicht 'Eigenschaften' anzuzeigen. Daraufhin werden die Eigenschaften des Knotens angezeigt.
- Geben Sie für diesen Knoten die Quelle der Eingabenachrichten an (beispielsweise den Namen einer WebSphere MQ-Warteschlange in der Eigenschaft Warteschlangenname).
Der MQInput-Knoten ruft aus dieser Warteschlange Nachrichten ab.
- Optional können Sie Werte für alle Eigenschaften angeben, die für diesen Knoten konfiguriert werden sollen. Soll beispielsweise sichergestellt werden, dass Nachrichten synchronisationspunktgesteuert eingereiht werden, müssen Sie die Eigenschaft Transaktionsmodus auf Ja setzen. Durch diese Option wird vermieden, dass der AggregateReply-Knoten Antwortnachrichten vor der Steuernachricht erhält, in der der Knoten über die Aggregationsinstanz informiert wird. Durch die transaktionale Steuerung für den Verteilernachrichtenfluss stellen Sie sicher, dass der Verteilernachrichtenfluss beendet wird, bevor der AggregateReply-Knoten eine Antwortnachricht enthält.
- Verbinden Sie das Ausgangsterminal des Empfangsknotens mit dem Eingangsterminal eines AggregateControl-Knotens. Diese Option ist die einfachste Konfiguration; Sie können zwischen dem Empfangsknoten und dem AggregateControl-Knoten gegebenenfalls weitere Knoten einfügen. Speichern Sie zum Beispiel die Anforderung zu Prüfzwecken (in einem
Datenbank-Knoten) oder fügen Sie eine eindeutige
Kennung zur Nachricht hinzu (in einem Compute-Knoten).
- Optional: Wenn Ihre Verteiler- und Sammelnachrichtenflüsse in einem Nachrichtenfluss kombiniert
sind, ändern Sie die Eigenschaft Modus für Reihenfolge auf der Registerkarte Erweitert. Wählen Sie die Option Nach Warteschlangenreihenfolge und stellen Sie sicher, dass auch die Eigenschaft Logische Reihenfolge ausgewählt ist. Bei Auswahl dieser Optionen wird der Empfangsknoten zu einem Einzelthread, sodass die logische Reihenfolge der in der Warteschlange eingehenden Nachrichten beibehalten wird. Dadurch werden alle weiteren Instanzthreads, die verfügbar gemacht werden, nur von den Empfangsknoten der Sammelnachrichtenflüsse gemeinsam genutzt, wodurch eine bessere Aggregation erreicht wird. Wenn sich Ihre Sammel- und Verteilernachrichtenflüsse in separaten Nachrichtenflüssen befinden, ist dieser Schritt nicht erforderlich, da Sie dem Sammelnachrichtenfluss zusätzliche Threads speziell zur Verfügung stellen können.
- AggregateControl-Knoten
- Der AggregateControl-Knoten aktualisiert die lokale
Umgebung, die der Eingabenachricht zugeordnet ist, mit Informationen, die der
AggregateRequest-Knoten benötigt. Der AggregateControl-Knoten erstellt den Ordner LocalEnvironment.ComIbmAggregateControlNode.
Dieser Ordner und die darin enthaltenen Felder
werden intern von WebSphere Message
Broker verwendet, d. h., bei der Entwicklung
eigener Nachrichtenflüsse sollte weder auf ihr Vorhandensein noch auf darin enthaltene Werte Bezug
genommen werden.
- Wählen Sie den AggregateControl-Knoten aus, um die Ansicht 'Eigenschaften' anzuzeigen. Daraufhin werden die Eigenschaften des Knotens angezeigt.
- Legen Sie die Eigenschaft Aggregationsname des AggregateControl-Knotens fest, um diese spezielle Aggregation zu identifizieren. Dieser Name wird später für die Zuordnung dieses AggregateControl-Knoten zu einem bestimmten AggregateReply-Knoten verwendet.
Der von Ihnen angegebene Aggregationsname muss im Kontext eines Brokers eindeutig sein.
- Sie haben außerdem die Möglichkeit, über die Eigenschaft Zeitlimit anzugeben, wie lange der Broker auf den Eingang von Antworten wartet, bevor Maßnahmen ergriffen werden (siehe Abschnitt Zeitlimitwerte für die Aggregation festlegen).
Wenn im AggregateControl-Knoten kein Zeitlimit festgelegt ist, werden intern gespeicherte Aggregationsanforderungen nicht entfernt, es sei denn, dass alle Aggregationsantwortnachrichten zurückgegeben werden. Dies kann dazu führen, dass die internen Warteschlangen nach und nach immer mehr Nachrichten enthalten. Um diese Situation zu vermeiden, sollten Sie für das Zeitlimit einen anderen Wert als null festlegen (null bedeutet, dass kein Zeitlimit besteht), damit die Anforderungen bei Ablauf des Zeitlimits entfernt werden und sich die Warteschlangen nicht mit redundanten Anforderungen füllen. Auch wenn kein Zeitlimit erforderlich ist oder erwartet wird, ist es sinnvoll, das Zeitlimit auf einen hohen Wert (beispielsweise 86400 Sekunden, d. h. 24 Stunden) zu setzen, damit alte Aggregationen hin und wieder aus den Warteschlangen entfernt werden.
- Verbinden Sie das Ausgangsterminal des AggregateControl-Knotens mit dem Eingangsterminal eine oder mehrerer Compute-Knoten, die die Analyse und Aufsplittung der Anforderung in der Eingabenachricht bereitstellen, die in diesem Terminal weitergegeben wird.
Achtung: Das Steuerterminal des AggregateControl-Knotens ist seit Version 6.0 veraltet und standardmäßig werden alle Verbindungen
(direkt oder indirekt) von diesem Terminal zum AggregateReply-Knoten ignoriert. Diese Konfiguration maximiert wird die Effizienz der Aggregationsflüsse, während die Zuverlässigkeit der Aggregationen nicht beeinträchtigt wird. Dies ist die optimale Konfiguration.
Wenn Sie jedoch eine Steuernachricht vom AggregateControl-Knoten an den AggregateReply-Knoten senden möchten, müssen Sie das Steuerterminal mit dem entsprechenden AggregateReply-Knoten im Sammelnachrichtenfluss verbinden (direkt oder indirekt; siehe Beschreibung unter Aggregations-Verteilungsflüsse und -Sammlungsflüsse zuordnen). Wenn Sie eine indirekte Verbindung zum AggregateReply-Knoten herstellen (beispielsweise über einen MQOutput-Knoten), müssen Sie einen Compute-Knoten einfügen, um der Nachricht die entsprechenden Header hinzuzufügen. Auf diese Weise wird die sichere Übertragung der Nachricht gewährleistet.
Für die Erkennung des Steuerterminals und der zugehörigen Verbindungen müssen Sie außerdem die Umgebungsvariable MQSI_AGGR_COMPAT_MODE aktivieren. Diese Option hat jedoch Auswirkungen hinsichtlich der Leistung und des Verhaltens von Nachrichtenaggregationen.
Eine vollständige Beschreibung dieser Auswirkungen und der Umgebungsvariable finden Sie unter Verwendung der Steuernachricht in Aggregationsflüssen.
- Compute-Knoten
- Der Compute-Knoten extrahiert Informationen aus der Eingabenachricht und konstruiert eine neue Ausgabenachricht.
Wenn die Zielanwendungen, von denen die Subtask-Anforderungen verarbeitet werden, die benötigten Informationen aus der einzelnen Eingabenachricht extrahieren können, muss kein Compute-Knoten zur Teilung der Nachricht eingefügt werden. Sie können die gesamte Eingabenachricht an alle Zielanwendungen übergeben.
Falls Ihre Zielanwendungen dem Empfang einer einzelnen Anforderung anstelle der gesamten Eingabenachricht erwarten, müssen Sie einen Compute-Knoten einfügen, um jede einzelne Subtask-Ausgabenachricht auf Basis der Eingabenachricht zu generieren. Konfigurieren Sie jeden Compute-Knoten wie im Folgenden beschrieben und kopieren Sie die entsprechende Untergruppe der
Eingabenachricht in die jeweilige Ausgabenachricht:
- Wählen Sie den Compute-Knoten aus, um die Ansicht 'Eigenschaften' anzuzeigen. Daraufhin werden die Eigenschaften des Knotens angezeigt.
- Wählen Sie für die Basiseigenschaft Rechenmodus einen Wert aus. Diese Eigenschaft gibt an, welche Bereiche der Nachrichtenbaumstruktur vom Knoten geändert werden. Der AggregateControl-Knoten fügt
Elemente in die Baumstruktur der lokalen Umgebung in der Eingabenachricht ein, die vom
AggregateRequest-Knoten gelesen werden, sobald die
Nachricht diesen erreicht. Vergewissern Sie sich, dass die lokale Umgebung im
Compute-Knoten aus der Eingabenachricht in die
Ausgabenachricht kopiert wird. Diese Konfiguration erfolgt automatisch, es sei denn, Sie geben
einen Wert an, der die lokale Umgebung enthält (entweder
Alle, Lokale
Umgebung, Lokale Umgebung und Nachricht
oder Ausnahme und lokale Umgebung).
Wenn Sie einen dieser Werte angeben, geht der Broker davon aus, dass Sie den Compute-Knoten mit ESQL-Code anpassen, sodass Daten in die lokale Umgebung geschrieben werden, und dass Sie alle Elemente in dieser Baumstruktur kopieren, die in der Ausgabenachricht erforderlich sind.
Um die lokale Umgebung zu ändern, müssen Sie die folgende Anweisung hinzufügen, damit die erforderlichen Aggregationsinformationen aus der Eingabe- in die Ausgabenachricht kopiert werden:
SET OutputLocalEnvironment.ComIbmAggregateControlNode =
InputLocalEnvironment.ComIbmAggregateControlNode;
- Optional können Sie Werte für alle Eigenschaften angeben, die für diesen Knoten konfiguriert werden sollen.
- Verbinden Sie das Ausgangsterminal jedes Compute-Knotens mit dem Eingangsterminal des Sendeknotens, der die Zieladresse der Ausgabeanforderungsnachricht darstellt, die Sie auf Basis der Eingabenachricht in diesem Knoten erstellt haben.
- Sendeknoten
- Fügen Sie für jede Ausgabenachricht, die Sie in Ihrem Verteilernachrichtenfluss generieren, einen Sendeknoten ein. Konfigurieren Sie jeden Knoten, wie im Folgenden beschrieben, und zwar mit den entsprechenden Änderungen für jede Zieladresse.
Hierbei muss es sich um einen Sendeknoten handeln, der das Request/Reply-Modell unterstützt, z. B. ein MQOutput-Knoten oder eine Kombination aus diesen Knoten (dies hängt von den Anforderungen der
Zielanwendungen ab).
- Wählen Sie den Sendeknoten aus, um die Ansicht 'Eigenschaften' anzuzeigen. Daraufhin werden die Eigenschaften des Knotens angezeigt.
- Geben Sie für diesen Knoten die Zieladresse der Ausgabenachrichten an.
Geben Sie beispielsweise in der Eigenschaft Warteschlangennamen den Namen einer WebSphere MQ-Warteschlange an, an die der MQOutput-Knoten Nachrichten sendet. Die Zielanwendung muss ihre Anforderung verarbeiten und die Antwort an die Antwortzieladresse senden, die in ihrer Eingabenachricht angegeben ist (z. B. die WebSphere MQ Warteschlange für Antwortnachrichten).
- Klicken Sie in der linken Ansicht auf Anforderung und legen Sie die
Werte für diese Eigenschaften so fest, dass Antworten an die Eingabewarteschlange des
Sammelnachrichtenflusses gesendet werden.
- Optional können Sie Werte für alle Eigenschaften angeben, die für diesen Knoten konfiguriert werden sollen.
- Verbinden Sie das Ausgangsterminal des Sendeknotens mit dem Eingangsterminal eines AggregateRequest-Knotens.
Wenn die Nachricht über das Ausgangsterminal des Sendeknotens weitergegeben wird, aktualisiert der integrierte Sendeknoten den Ordner 'WrittenDestination' in der zugehörigen lokalen Umgebung mit zusätzlichen Informationen, die vom AggregateRequest-Knoten benötigt werden.
Von den integrierten Knoten werden der Name der Warteschlange und des Warteschlangenmanagers sowie die Nachrichten-ID, die Korrelations-ID (aus dem MQMD-Header) sowie die Antwort-ID (wird auf denselben Wert wie die Nachrichten-ID gesetzt) geschrieben.
- AggregateRequest-Knoten
- Fügen Sie für jede Ausgabenachricht, die Sie in Ihrem Verteilernachrichtenfluss generieren, einen AggregateRequest-Knoten ein.
- Wählen Sie den AggregateRequest-Knoten aus, um die Ansicht 'Eigenschaften' anzuzeigen. Daraufhin werden die Eigenschaften des Knotens angezeigt.
- Setzen Sie die Basiseigenschaft Ordnername auf
einen Wert, der die Art der gesendeten Anforderung identifiziert. Dieser Wert wird vom AggregateReply-Knoten für den Abgleich mit der Antwortnachricht verwendet, wenn sie im Sammelnachrichtenfluss empfangen wird.
Der Ordnername, den Sie für jede vom Verteilernachrichtenfluss generierte Anforderung angeben, muss eindeutig sein.
Der AggregateRequest-Knoten schreibt für jede von ihm verarbeitete Nachricht einen Datensatz in WebSphere MQ. Mit diesem Eintrag kann der AggregateReply-Knoten ermitteln, welche Anforderung den einzelnen Antworten zugeordnet ist. Wenn Ihre Sendeknoten nicht transaktionsgesteuert sind, geht die Antwortnachricht möglicherweise vor der Festschreibung dieser Datenbankaktualisierung im Sammelnachrichtenfluss ein. Unter Zeitlimitwerte für die Aggregation festlegen finden Sie detaillierte Informationen darüber, wie diese Situation mithilfe von Zeitlimits vermieden werden kann.
Vorsicht:
Auch wenn der oben beschriebene Fall durch Zeitlimits vermieden werden kann, sollten Sie den Verteilernachrichtenfluss als transaktionsorientierten Nachrichtenfluss konfigurieren. Damit können Antworten erst an den Verteilernachrichtenfluss gesendet werden, nachdem die Datenbankaktualisierungen von den AggregateRequest-Knoten festgeschrieben wurden.
- Um den Nachrichtenfluss zu speichern und die Konfiguration zu überprüfen, drücken Sie Steuerungstaste+S oder klicken Sie auf .
Um die vom Verteilernachrichtenfluss initialisierten Aggregationsantworten zu erfassen, müssen Sie einen Sammelnachrichtenfluss erstellen (siehe
Aggregations-Sammelnachrichtenfluss erstellen).