Informationen zum Mustercode 'Collector Node'

Der Mustercode 'Collector Node' enthält einen Nachrichtenfluss mit zwei Collector-Knoten.

Der Mustercode basiert auf dem folgenden Szenario:

  1. Der Nachrichtenfluss erstellt aus drei getrennten Teilen (Kundenauftragsdaten, Lagerdaten und Versandkosten) eines bestimmten Auftrags einen Rechnungsdatensatz.
  2. Der Nachrichtenfluss unterteilt alle Rechnungen in Stapel, die in 90-Sekunden-Intervallen gesendet werden.

Die Rechnung für eine Bestellung wird auf Basis von Eingabedaten aus drei Quellen erstellt:

Im folgenden Diagramm ist der Nachrichtenfluss 'CollectorNodeSampleFlow' dargestellt:

Screenshot des Nachrichtenflusses 'CollectorNodeSampleFlow'.

Der erste Collector-Knoten im Nachrichtenfluss veranschaulicht Folgendes:

Der zweite Collector-Knoten im Nachrichtenfluss veranschaulicht Folgendes:

Das Warnsymbol neben den Collector-Knoten in der Abbildung zeigt an, dass die Catch-Terminals nicht verbunden sind.

Der Nachrichtenfluss 'CollectorNodeSampleFlow'

Nachrichtenflusseingabe

Die Eingabedaten für den Nachrichtenfluss stammen aus den folgenden drei Quellen:

Die Eingabe aus allen drei Empfangsknoten wird an den ersten Collector-Knoten im Nachrichtenfluss (CollectByCustNum) gesendet, der so konfiguriert ist, dass eine Datensammlung fertiggestellt wird, sobald aus jeder Eingabequelle je eine Nachricht eingegangen ist, die den im Collector-Knoten konfigurierten Kriterien entspricht.

Für die Korrelation von Nachrichten in einer Nachrichtensammlung auf Basis des Inhalts der ankommenden Daten kann die Mustererkennung verwendet werden. Die Mustererkennung kann in einem Eingabeterminal definiert werden; dazu können auf jedem Eingabeterminal zwei Felder verwendet werden:

Im Collector-Knoten wird die Mustererkennung in der Tabelle Definition der Objektgruppe gesetzt. Diese Tabelle befindet sich auf der Seite Grundeinstellung der Ansicht 'Eigenschaften'.

Der Collector-Knoten CollectByCustNum verfügt über drei Eingabeterminals, über die Eingabedaten aus den drei Empfangsknoten erfasst werden:

Die drei Eingabeterminals sind in der folgenden Abbildung dargestellt:

Screenshot des Collector-Knotens CollectByCustNum

In CollectByCustNum wird die Eingabe aus dem MQInput-Knoten MQ COLL_IN1 und dem FileInput-Knoten 'fileinput' über CustomerNumber korreliert. Im Eingabeterminal IN3 ist keine Mustererkennung erforderlich; stattdessen enthält die Eingabe aus dem MQInput-Knoten MQ COLL_IN3 die Versandgebühren, die jeder Sammlung hinzugefügt werden.

Im folgenden Beispiel ist 111 die Kundennummer (CustomerNumber). Die Eingabeterminals erhalten die folgenden Eingabedaten:

Nachrichtensammlungen werden mit untergeordneten Baumstrukturen erstellt, die den ersten Bestellauftrag, die Zustellinformationen aus dem Warenlager und die Versandgebühr enthalten.

Die fertiggestellte Nachrichtensammlung wird an den Rechenknoten Compute1 weitergegeben, der anhand dieser Eingabedaten eine neue Rechnungsnachricht erstellt. Dieser Rechenknoten führt folgende Tasks aus:

Die vom Rechenknoten erstellte Nachricht hat folgendes Format:

<Invoice>
    <CustomerNumber>111</CustomerNumber>
    <Product>Toaster</Product>
    <Quantity>1</Quantity>
    <Price>8.94</Price>
    <Delivery>2 Tage</Delivery>
</Invoice> 

Die in Compute1 erstellte Rechnungsnachricht wird an den zweiten Collector-Knoten im Nachrichtenfluss (CollectUntilTrigger) weitergegeben. Dieser Collector-Knoten verfügt über ein Eingabeterminal (IN4). In diesem Collector-Knoten werden die Nachrichtensammlungen unter Verwendung der Eigenschaft Zeitlimit erstellt, nicht über die Eigenschaft Menge wie im ersten Collector-Knoten. Die Eigenschaft Zeitlimit wird auf 30 Sekunden gesetzt, d. h. alle Nachrichten, die innerhalb von 30 Sekunden empfangen werden, stellen eine vollständige Sammlung dar.

Auf diesem Knoten ist auch die Ereigniskoordination aktiviert. Ein TimeoutNotification-Knoten ist mit dem Steuerterminal des Collector-Knotens verbunden. Dadurch werden fertiggestellte Datensammlungen erst dann an den nächsten Knoten im Nachrichtenfluss weitergegeben, wenn das Steuerterminal vom TimeoutNotification-Knoten über einen entsprechenden Auslöser dazu angewiesen wird. Der TimeoutNotification-Knoten sendet alle 90 Sekunden eine Nachricht.

Die Nachrichtensammlungen werden an den Rechenknoten Compute2 gesendet. Dieser Rechenknoten extrahiert die Nachrichtendaten aus den einzelnen Sammlungen, fügt Datum und Uhrzeit hinzu und erstellt so die endgültige Ausgabenachricht. Die einzelnen Sammlungen können mehr als eine Rechnung enthalten, je nach Anzahl der Rechnungsnachrichten, die jeder Sammlung im Collector-Knoten CollectUntilTrigger hinzugefügt wurden.

Die endgültige Ausgabenachricht hat folgendes Format:

<Invoices>
  <Invoice>
     <InvoiceNumber>111</InvoiceNumber>
      <Product>Toaster</Product>
     
<NumberOrdered>1</NumberOrdered>
      <TotalCost>9.94</TotalCost>
      <Delivery>2 Tage</Delivery>     
 </Invoice>
  <Invoice>
     <InvoiceNumber>222</InvoiceNumber>
      <Product>Küchenmaschine</Product>
     
<NumberOrdered>2</NumberOrdered>
      <TotalCost>75.93</TotalCost>
      <Delivery>4
Tage</Deliver>     
 </Invoice>
 <Date>2007-08-10</Date>
 <Time>17:18:22</Time>
</Invoices>

Jedem Collector-Knoten im Nachrichtenfluss ist ein Rechenknoten nachgeschaltet. Jedem Collector-Knoten muss ein Rechenknoten oder ein JavaCompute-Knoten folgen, da nur diese Knoten die Nachrichtenbaumstrukturen analysieren können, die von einem Collector-Knoten weitergegeben werden. Sie können einen Rechenknoten oder JavaCompute-Knoten einsetzen, um Nachrichtenteile aus der Nachrichtensammlung zu extrahieren und neue Nachrichten zu erstellen, die von anderen Knoten im Nachrichtenfluss verarbeitet werden können.

Zurück zum Beginn des Mustercodes