Den Mustercode 'Collector Node' können Sie erst ausführen, nachdem Sie die Konfigurationsanweisungen beendet, die Informationen im Abschnitt Mustercode 'Collector Node' konfigurieren beachtet und den Nachrichtenfluss wie im Abschnitt Mustercode 'Collector Node' beschrieben importiert und implementiert haben.
Hinweis: Eventuell erleichtert es Ihnen die Arbeit, wenn Sie die Dateien anfangs in ein temporäres Verzeichnis speichern und sie dann, wenn Sie den Mustercode ausführen, kopieren und in das Verzeichnis einfügen, das vom bereits eingerichteten FileInput-Knoten überwacht wird. Durch diese Vorgehensweise stellen Sie sicher, dass die Dateien dem Broker innerhalb des Stapelzeitlimits des Collector-Knotens zugestellt werden.
Sollten bei der Ausführung des Mustercodes Probleme auftreten, finden Sie im Abschnitt 'Fehlerbestimmung' am Ende dieses Themas sowie im Abschnitt Probleme bei der Ausführung von Mustercodes beheben in der WebSphere Message Broker-Dokumentation weitere Informationen.
Nach der Konfiguration des Mustercodes überwacht der FileInput-Knoten 'fileinput' das Verzeichnis auf Zustellungsdetails für die Kundenaufträge 111 und 222.
Hinweis: Je nachdem, wie schnell aufeinander die Kundenaufträge übergeben werden, generiert der Nachrichtenfluss aus den Eingaben der beiden Aufträge entweder einen gemeinsamen Stapel mit einer Rechnungsausgabenachricht für beide Aufträge oder für jeden Auftrag einen eigenen Stapel, sodass zwei Rechnungsausgabenachrichten generiert werden.
Damit der Mustercode für die Kundenaufträge 111 und 222 ausgeführt werden kann, müssen Nachrichten mit folgenden Informationen in die entsprechenden WebSphere MQ-Warteschlangen eingereiht werden:
Sie müssen die Auftragsdatei mit der Kundennummer in das Verzeichnis speichern, das Sie bei der Konfiguration des Mustercodes erstellt haben.
So führen Sie den Mustercode für die Kundenaufträge 111 und 222 aus:
Hinweis: Bei aktivem Nachrichtenfluss werden die Dateien 111.order und 222.order gelesen und anschließend nahezu unverzüglich entfernt. Daher werden die Dateien nicht mehr angezeigt.
<Costing> <CustomerNumber>111</CustomerNumber> <Product>Toaster</Product> <UnitPrice>4.99</UnitPrice> </Costing>Durch diese Aktion wird auch der WebSphere MQ-Nachrichtenlistener des Testclients gestartet, der so konfiguriert ist, dass er alle Ausgabe- und Ablaufwarteschlangen 5 Minuten lang auf Nachrichten überwacht. Wenn Sie den Listener nach der Verarbeitung aller Nachrichten beenden möchten, klicken Sie jederzeit auf Stopp (blaue, quadratische Schaltfläche in der Symbolleiste der Ereignisse des Nachrichtentestflusses).
<Packaging> <CustomerNumber>111</CustomerNumber> <Postage>1.95</Postage> </Packaging>
<Costing> <CustomerNumber>222</CustomerNumber> <Product>Food Processor</Product> <UnitPrice>35.99</UnitPrice> </Costing>
<Packaging> <CustomerNumber>222</CustomerNumber> <Postage>5.55</Postage> </Packaging>
<Invoices> <Invoice> <InvoiceNumber>111</InvoiceNumber> <Product>Toaster</Product> <TotalCost>6.94</TotalCost> <Delivery>2 days</Delivery> </Invoice> <Invoice> <InvoiceNumber>222</InvoiceNumber> <Product>Food Processor</Product> <TotalCost>77.53</TotalCost> <Delivery>4 days</Delivery> </Invoice> <Date>2009-10-16</Date> <Time>19:24:34</Time> </Invoices>Der Collector-Knoten wird allerdings alle 90 Sekunden ausgelöst. Wenn Sie die Nachrichten nicht innerhalb eines einzigen Intervalls eingereiht haben, erhalten Sie daher zwei separate Rechnungsnachrichten, eine mit Rechnung 111 und eine mit Rechnung 222.
Speichern Sie den Inhalt von 333.order in das Verzeichnis, das Sie bei der Ausführung der Konfigurationsanweisungen erstellt haben. Beispiel:
Hinweis: Bei aktivem Nachrichtenfluss wird die Datei 333.order gelesen und anschließend nahezu unverzüglich entfernt. Daher wird die Datei nicht mehr angezeigt.
<Costing> <CustomerNumber>333</CustomerNumber> <Product>Kettle</Product> <UnitPrice>5.99</UnitPrice> </Costing>Durch diese Aktion wird auch der WebSphere MQ-Nachrichtenlistener des Testclients gestartet, der alle Ausgabe- und Ablaufwarteschlangen 5 Minuten lang auf Nachrichten überwacht. Wenn Sie den Listener nach der Verarbeitung aller Nachrichten beenden möchten, klicken Sie jederzeit auf Stopp (blaue, quadratische Schaltfläche in der Symbolleiste der Ereignisse des Nachrichtentestflusses).
<Packaging> <CustomerNumber>333</CustomerNumber> <Postage>2.05</Postage> </Packaging>
<Invoices> <Invoice> <InvoiceNumber>333</InvoiceNumber> <Product>Kettle</Product> <TotalCost>8.04</TotalCost> <Delivery>2 days</Delivery> </Invoice> <Date>2009-10-16</Date> <Time>19:28:03</Time> </Invoices>
Die Ausgabenachricht in CollectorNodeSample_111_222_orders.mbtest enthält die Rechnungen für die Kundenaufträge 111 und 222. Die Ausgabenachrichten haben folgendes Format:
<Invoices> <Invoice> <InvoiceNumber>111</InvoiceNumber> <Product>Toaster</Product> <NumberOrdered>1</NumberOrdered> <TotalCost>8.94</TotalCost> <Delivery>2 Tage</Deliver> </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>
Die Ausgabenachricht veranschaulicht, wie der erste Collector-Knoten (CollectByCustNum) die Kundenaufträge für 111 und 222 sortiert, um zwei Nachrichtensammlungen zu erstellen. Jede Sammlung wurde an den ersten Rechenknoten weitergegeben, in dem die Daten aus der Sammlung für jeden Auftrag zusammengeführt wurden, um so eine Rechnung zu erstellen. Vom Rechenknoten werden zwei Nachrichten weitergegeben, für jeden Kundenauftrag eine. Wenn diese Nachrichten am zweiten Collector-Knoten CollectUntilTrigger eingehen, wird alle 15 Sekunden eine Nachrichtensammlung fertiggestellt, sodass beide Nachrichten derselben Sammlung hinzugefügt werden.
Die Ausgabenachricht in CollectorNodeSample_333_orders.mbtest enthält die Rechnung für den Kundenauftrag 333.
<Invoices> <Invoice> <InvoiceNumber>333</InvoiceNumber> <Product>Kessel</Product> <NumberOrdered>1</NumberOrdered> <TotalCost>9.94</TotalCost> <Delivery>2 Tage</Deliver> </Invoice> <Date>2007-08-10</Date> <Time>17:18:22</Time> </Invoices>
Der erste Collector-Knoten CollectByCustNum sortiert den Kundenauftrag für 333, um eine Sammlung zu erstellen. Diese Sammlung wird anschließend an den ersten Rechenknoten weitergegeben, an dem die Daten aus der Sammlung für den Auftrag zusammengeführt werden, um so eine Rechnung zu erstellen. Diese Nachricht wird anschließend an den zweiten Collector-Knoten CollectUntilTrigger weitergegeben. Dieser Knoten stellt alle 15 Sekunden eine Sammlung fertig; dieser Auftrag trifft daher nach der Fertigstellung der Sammlung mit den Aufträgen 111 und 222 ein und wird einer neuen Sammlung hinzugefügt.
Die fertiggestellte Sammlung mit den Aufträgen 111 und 222 sowie die fertiggestellte Sammlung mit Auftrag 333 verbleiben beide im Collector-Knoten CollectUntilTrigger, bis das Zeitlimit des TimeoutNotification-Knotens abgelaufen ist. Ist dieses Zeitlimit nach 300 Sekunden abgelaufen, werden alle fertiggestellten Sammlungen an den letzten Rechenknoten weitergegeben. In diesem Knoten werden die folgenden beiden Nachrichten generiert:
Beide Nachrichten enthalten dieselben Zeitmarkeninformationen, da sie gleichzeitig an den letzten Rechenknoten weitergegeben wurden, also zu dem Zeitpunkt, als das Zeitlimitintervall ablief.
Hinweis: Unter Umständen erhalten Sie die Rechnungsausgabenachricht für Kundenauftrag 333 in CollectorNodeSample_111_222_orders.mbtest und umgekehrt. Dies liegt daran, dass beide Nachrichten gleichzeitig vom Collector-Knoten weitergegeben werden und daher in beliebiger Reihenfolge in der Ausgabewarteschlange COLL_OUT ankommen können.
Der Nachrichtenfluss 'CollectorNodeSample' enthält drei Traceknoten. Zwei dieser Knoten sind einem Collector-Knoten nachgestellt, um die Nachrichtenbaumstruktur anzuzeigen, die vom Collector-Knoten für die einzelnen Nachrichtensammlungen erstellt wird. Der Traceknoten Trace1 folgt dem Collector-Knoten CollectByCustNum, der Traceknoten Trace2 dem Collector-Knoten CollectUntilTrigger. Der dritte Traceknoten ist dem TimeoutNotification-Knoten TimerTrigger nachgestellt, um die Auslöser des TimeoutNotification-Knotens zu protokollieren.
Alle Traceknoten schreiben ihre Aufzeichnungen in die gleiche Datei collectorNodeSample.trc. Die Aufzeichnungen enthalten auch eine Zeitmarke und geben Aufschluss darüber, woher die Ausgabe stammt. In diesem Szenario können Sie die Tracedatei überwachen, um den Ablauf der Ereignisse während der Bildung und Weiterleitung der Sammlungen bei laufender Uhr zu beobachten.
Die Tracedatei collectorNodeSample.trc befindet sich im folgenden Verzeichnis:
Über die folgenden Links können Sie Beispiele für die Ausgaben zweier dieser Traceknoten anzeigen. Der Beginn jeder Nachrichtensammlung ist blau markiert, der Beginn der untergeordneten Baumstruktur der einzelnen Eingabeterminals sowie der Nachrichtendaten aus den einzelnen Eingabeterminals ist rot markiert.
Wenn Nachrichten an die Warteschlange COLL_EXPIRE1 gesendet werden, war die Nachrichtensammlung bei Ablauf des Zeitlimits im Collector-Knoten CollectByCustNum noch nicht vollständig fertiggestellt. Dieser Fall kann beispielsweise eintreten, wenn eine der Eingaben aus den beiden MQInput-Knoten oder aus dem FileInput-Knoten erst nach Ablauf des Zeitlimits für die Sammlung eingingen. Die Ablaufzeit des Knotens CollectByCustNum beträgt 300 Sekunden. Wenn Sie eine Nachricht in der Warteschlange COLL_EXPIRE1 empfangen haben, führen Sie den Mustercode erneut aus und versuchen Sie dabei, die Datei und die WebSphere MQ-Nachrichten innerhalb des Zeitlimits von 300 Sekunden zu übergeben.
Wenn das Aufrufereignis innerhalb seines Zeitlimits keine Nachrichten empfängt und sich in COLL_EXPIRE1 keine Nachrichten befinden, wurde eventuell erst nach Ablauf der Wartezeit des Testclients eine Nachricht in COLL_OUT eingereiht. Überprüfen Sie die Warteschlangenlänge in WebSphere MQ Explorer. Sie müssen die Wartezeit des Testclients, wie in den Konfigurationsanweisungen beschrieben, von den standardmäßigen 120 Sekunden auf 300 Sekunden heraufsetzen. Je nachdem, wie schnell Sie die Schritte 1 bis 6 ausführen können, kann die Generierung einer Nachricht länger als 2 Minuten dauern.