Mustercode 'Collector Node' ausführen

Mustercode ausführen, um Kundenaufträge 111 und 222 zu senden

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:

  1. Sie müssen den Inhalt der Dateien 111.order und 222.order in das Verzeichnis speichern, das Sie bei der Konfiguration (siehe Mustercode 'Collector Node' konfigurieren) erstellt haben (die Dateien müssen unter dem Namen 111.order und 222.order gespeichert werden). Dieses Verzeichnis mit den beiden Auftragsdateien wird vom FileInput-Knoten 'fileinput' überwacht. Durch diese Aktion werden dem Nachrichtenfluss die Auftragsdetails in Form einer Datei bereitgestellt, wobei die Kundennummer dem Dateinamen entnommen wird.

    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.

  2. Öffnen Sie die Datei CollectorNodeSampleFlowProject/CollectorNodeSample_111_222_orders.mbtest. Diese Datei enthält einmal die Aktion 'Aufrufen' und dreimal die Aktion 'In Warteschlange einreihen'. Durch diese Aktionen werden die WebSphere MQ-Preis- und Versandgebührennachrichten für die Aufträge 111 und 222 in der angegebenen Reihenfolge versendet. Die Kundennummer ist in den Nachrichten im Feld CustomerNumber angegeben.
  3. Wählen Sie Aufrufen aus und klicken Sie auf Nachricht senden, um die Preise für Auftrag 111 an die Warteschlange COLL_IN1 zu senden.
    <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).
  4. Wählen Sie das erste In Warteschlange einreihen aus und klicken Sie auf Nachricht senden, um die Versandgebührennachricht für Auftrag 111 an die Warteschlange COLL_IN3 zu senden.
    <Packaging>
      <CustomerNumber>111</CustomerNumber>
      <Postage>1.95</Postage>
    </Packaging>
    
  5. Wählen Sie das zweite In Warteschlange einreihen aus und klicken Sie auf Nachricht senden, um die Preisnachricht für Auftrag 222 an die Warteschlange COLL_IN1 zu senden.
    <Costing>
       <CustomerNumber>222</CustomerNumber>
       <Product>Food Processor</Product>
       <UnitPrice>35.99</UnitPrice>
    </Costing>
    
  6. Wählen Sie das dritte In Warteschlange einreihen aus und klicken Sie auf Nachricht senden, um die Versandgebührennachricht für Auftrag 222 an die Warteschlange COLL_IN3 zu senden.
    <Packaging>
      <CustomerNumber>222</CustomerNumber>
      <Postage>5.55</Postage>
    </Packaging>
    
  7. Der erste Collector-Knoten (CollectByCustNum) sammelt die entsprechende Preisnachricht aus COLL_IN1, die Auftragsdatei aus 'fileinput' und die Versandgebührennachricht aus COLL_IN3 und leitet diese Datensammlung weiter, damit die ESQL des Compute1-Knotens eine Rechnungsnachricht generieren kann, die an den zweiten Collector-Knoten (CollectUntilTrigger) weitergeleitet wird. Die gleiche Aktion wird auch für die Nachrichten von Auftrag 222 ausgeführt.
  8. Nach jeweils einem Intervall von 90 Sekunden löst der TimeoutNotification-Knoten TimerTrigger den zweiten Collector-Knoten CollectUntilTrigger aus, der die gesammelten Rechnungsnachrichten innerhalb des Zeitlimitintervalls von 30 Sekunden an eine Rechnungsstapelnachricht übergibt.
  9. Nach der Übergabe des zweiten Collector-Knotens CollectUntilTrigger wird die daraus resultierende Ausgabenachricht von den WebSphere MQ-Listenern des Testclients, die bei der Aktion 'Aufrufen 'gestartet wurden, erkannt und die in die Warteschlange COLL_OUT eingegangene Nachricht wird angezeigt. In der Regel werden die beiden Aufträge in einer einzigen Stapelnachricht wie der folgenden ausgegeben:
    <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.

Mustercode ausführen, um Kundenauftrag 333 zu senden

  1. 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.

  2. Öffnen Sie die Datei CollectorNodeSampleFlowProject/CollectorNodeSample_333_orders.mbtest. Diese Datei enthält einmal die Aktion 'Aufrufen' und einmal die Aktion 'In Warteschlange einreihen'. Durch diese Aktionen werden die WebSphere MQ-Preis- und Versandgebührennachrichten für den Auftrag 333 in der angegebenen Reihenfolge versendet.
  3. Wählen Sie Aufrufen aus und klicken Sie auf Nachricht senden, um die Preise für Auftrag 333 an die Warteschlange COLL_IN1 zu senden.
    <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).
  4. Wählen Sie In Warteschlange einreihen aus und klicken Sie auf Nachricht senden, um die Versandgebührennachricht für Auftrag 333 an die Warteschlange COLL_IN3 zu senden.
    <Packaging>
      <CustomerNumber>333</CustomerNumber>
      <Postage>2.05</Postage>
    </Packaging>
    
  5. Speichern Sie die Datei 333.order in das Verzeichnis, das Sie bei der Ausführung der Konfigurationsanweisungen erstellt haben.
  6. Die Nachrichten und die Datei werden verarbeitet. Nach der Verarbeitung dieses Stapels empfängt der durch die Aufrufaktion gestartete Listener des Testclients einen Ausgaberechnungsstapel mit der Rechnung zu Auftrag 333 und zeigt diese an.
    <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 Ausgabe der drei Aufträge

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.

Von den Traceknoten im Nachrichtenfluss erstellte Tracedateien

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.

Fehlerbestimmung

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.

Zurück zum Beginn des Mustercodes