Collector ノードのサンプルを実行する前に、セットアップ手順を完了し (Collector サンプルのセットアップを参照)、メッセージ・フローのインポートおよびデプロイ (Collector ノードのサンプルを参照) を行う必要があります。
注 最初にファイルを一時ディレクトリーに保存しておき、サンプルを実行する時に、既にセットアップした FileInput ノードがモニターするディレクトリーにそれらのファイルをコピーして貼り付けすることができるようにするほうが容易であることに気が付くかもしれません。 この操作によって、Collector ノードのバッチのタイムアウトの時間内に確実にファイルをブローカーに送信できます。
サンプルの実行時に問題を検出した場合は、 WebSphere Message Broker 資料の『サンプル実行時の問題の解決』を参照してください。そして、このトピックの後の方に出てくる『問題判別』を確認します。
サンプルのセットアップを完了した時、FileInput ノード fileinput は、顧客オーダー 111 および 222 の配達の詳細を求めてディレクトリーをモニターします。
注: 顧客オーダーをどれほど迅速に処理依頼するかによって、2 つのオーダーの入力を行った時に、フローが両方のオーダーを含む単一バッチの送り状出力メッセージを生成する場合と、それぞれのオーダーが個別のバッチに渡されて 2 つの送り状出力メッセージが生成される場合があります。
顧客オーダー 111 および 222 のサンプルを実行するには、次の情報を持つメッセージを、該当する WebSphere MQ キューに置く必要があります。
サンプルをセットアップする時に作成したディレクトリーに顧客番号オーダー・ファイルを置く必要があります。
顧客オーダー 111 および 222 のサンプルを実行するには、次のようにします。
注: メッセージ・フローが実行中の場合は、111.order および 222.order ファイルは読み取られてからほぼ即時に除去されるので、これらのファイルは表示されなくなります。
<Costing> <CustomerNumber>111</CustomerNumber> <Product>Toaster</Product> <UnitPrice>4.99</UnitPrice> </Costing>この操作によって、すべての出力キューおよび有効期限キュー上のメッセージを 5 分間継続して listen するよう構成されたテスト・クライアントの WebSphere MQ メッセージ・リスナーも開始されます。すべてのメッセージが処理されたら、リスナーを終了するため、任意の時点で「停止」(メッセージ・テスト・フロー・イベント・ツールバーにある青色の四角いボタン) をクリックします。
<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>ただし、Collector ノードは 90 秒ごとにトリガーされるので、単一間隔内にメッセージをエンキューしなかった場合には、送り状 111 のメッセージと送り状 222 のメッセージの 2 つの別個の送り状メッセージを受信することになります。
333.order の内容を、セットアップ手順で作成したディレクトリーに保存します。以下に例を示します。
注: メッセージ・フローが実行中の場合は、333.order ファイルは読み取られてからほぼ即時に除去されるので、このファイルは表示されなくなります。
<Costing> <CustomerNumber>333</CustomerNumber> <Product>Kettle</Product> <UnitPrice>5.99</UnitPrice> </Costing>この操作によって、すべての出力キューおよび有効期限キュー上のメッセージを 5 分間継続して listen するテスト・クライアントの WebSphere MQ メッセージ・リスナーも開始されます。すべてのメッセージが処理されたら、リスナーを終了するため、任意の時点で「停止」(メッセージ・テスト・フロー・イベント・ツールバーにある青色の四角いボタン) をクリックします。
<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>
CollectorNodeSample_111_222_orders.mbtest の出力メッセージには、顧客オーダー 111 および 222 の送り状が含まれています。 出力メッセージは、次のようなフォーマットを持っています。
<Invoices> <Invoice> <InvoiceNumber>111</InvoiceNumber> <Product>Toaster</Product> <NumberOrdered>1</NumberOrdered> <TotalCost>8.94</TotalCost> <Delivery>2 days</Deliver> </Invoice> <Invoice> <InvoiceNumber>222</InvoiceNumber> <Product>Food Processor</Product> <NumberOrdered>2</NumberOrdered> <TotalCost>75.93</TotalCost> <Delivery>4 days</Deliver> </Invoice> <Date>2007-08-10</Date> <Time>17:18:22</Time> </Invoices>
出力メッセージは、最初の Collector ノード CollectByCustNum が、2 つのメッセージ・コレクションを作成するために、顧客オーダー 111 および 222 を照合した方法を示しています。各コレクションは最初の Compute ノードに伝搬されており、そこで各注文に対するコレクションからのデータが、送り状を作成するために結合されます。 Compute ノードによって 2 つのメッセージが、各顧客オーダーについて 1 つずつ、伝搬されます。これらのメッセージが 2 番目の Collector ノード CollectUntilTrigger に到達すると、これらのメッセージが両方とも同じコレクションに追加されるように、メッセージ・コレクションが 15 秒ごとに完了します。
CollectorNodeSample_333_orders.mbtest の出力メッセージは、顧客オーダー 333 の送り状を含んでいます。
<Invoices> <Invoice> <InvoiceNumber>333</InvoiceNumber> <Product>Kettle</Product> <NumberOrdered>1</NumberOrdered> <TotalCost>9.94</TotalCost> <Delivery>2 days</Deliver> </Invoice> <Date>2007-08-10</Date> <Time>17:18:22</Time> </Invoices>
最初の Collector ノード CollectByCustNum は、顧客オーダー 333 を照合して 1 つのコレクションを作成します。このコレクションは次いで最初の Compute ノードに伝搬され、そこで注文に対するコレクションからのデータが、送り状を作成するために結合されます。 このメッセージが、次いで 2 番目の Collector ノード CollectUntilTrigger に伝搬されます。このノードは収集を 15 秒ごとに完了するので、この注文は、注文 111 および 222 を含むコレクションが完了した後に到着し、新規のコレクションに追加されます。
注文 111 と 222 を含む完了したコレクション、および注文 333 を含む完了したコレクションは、TimeoutNotification ノードからの時間間隔が切れるまで、両方とも Collector ノード CollectUntilTrigger に保持されます。300 秒後にタイムアウトが切れると、すべての完了したコレクションは、最後の Compute ノードに伝搬されます。この Compute ノードで、次の 2 つのメッセージが生成されます。
両方のメッセージは、タイムアウト間隔が切れた時に、最後の Compute ノードに同時に伝搬されるので、同一のタイム・スタンプ情報を含んでいます。
注: 顧客オーダー 333 に対する出力送り状メッセージを CollectorNodeSample_111_222_orders.mbtest で受け取る場合も、その逆の場合もあります。これは、両方のメッセージが Collector ノードから同時に伝搬され、出力キュー COLL_OUT に到着する順序が定まらないためです。
CollectorNodeSample メッセージ・フローには、3 つの Trace ノードが含まれています。 各メッセージ・コレクションについて Collector ノードによって作成されるメッセージ・ツリーを示すために、2 つのノードは Collector ノードの後に置かれています。Trace ノード Trace1 は Collector ノード CollectByCustNum の後に置かれ、Trace ノード Trace2 は Collector ノード CollectUntilTrigger の後に置かれています。3 番目の Trace ノードは、TimeoutNotification ノード TimerTrigger の後に置かれ、TimeoutNotification ノードのトリガーをログに記録します。
すべての Trace ノードは、同一のファイル collectorNodeSample.trc に書き込みを行い、出力の出所を定義したテキストとタイム・スタンプが含まれています。このシナリオでは、このトレース・ファイルを見れば、タイマーが刻まれるにつれてコレクションが形成されて伝搬されるイベントを順次監視することができます。
collectorNodeSample.trc トレース・ファイルは、以下の場所に存在します。
以下のトレース出力へのリンクには、2 つの Trace ノードからの出力の例が示されています。各メッセージ・コレクションの先頭は、青で強調表示されています。各 Input ターミナルのサブツリーおよび各 Input ターミナルからのメッセージ・データの先頭は、赤で強調表示されています。
メッセージが COLL_EXPIRE1 キューに送信された場合、Collector ノード CollectByCustNum でタイムアウトが切れる前にメッセージ・コレクションが完了しませんでした。収集の有効期限が切れる前に、2 つの MQInput ノードまたは FileInput ノードからの入力のいずれかが、受信されなかったためかもしれません。 CollectByCustNum ノードの有効期限は、300 秒に設定されています。COLL_EXPIRE1 キューにメッセージを受け取った場合は、再度サンプルの実行を試み、300 秒のタイムアウト以内でファイルおよび WebSphere MQ メッセージを入力するようにしてください。
「起動」イベントが何のメッセージも受信することなくタイムアウトになり、COLL_EXPIRE1 にメッセージがない場合、テスト・クライアントが待機を停止した後で COLL_OUT にメッセージが出力されているかもしれません。WebSphere MQ Explorer でそのキュー項目数を確認します。 セットアップ手順で説明されているように、テスト・クライアントの待機時間をデフォルトの 120 秒から 300 秒に拡張する必要があります。 ステップ 1 から 6 までを実行した速さによっては、メッセージが生成されるのに 2 分を超える時間がかかる場合もあります。