Collector ノード・サンプルの実行

顧客オーダー 111 および 222 を送信するためにサンプルを実行する

Collector ノードのサンプルを実行する前に、セットアップ手順を完了し (Collector サンプルのセットアップを参照)、メッセージ・フローのインポートおよびデプロイ (Collector ノードのサンプルを参照) を行う必要があります。

最初にファイルを一時ディレクトリーに保存しておき、サンプルを実行する時に、既にセットアップした FileInput ノードがモニターするディレクトリーにそれらのファイルをコピーして貼り付けすることができるようにするほうが容易であることに気が付くかもしれません。 この操作によって、Collector ノードのバッチのタイムアウトの時間内に確実にファイルをブローカーに送信できます。

サンプルの実行時に問題を検出した場合は、 WebSphere Message Broker 資料の『サンプル実行時の問題の解決』を参照してください。そして、このトピックの後の方に出てくる『問題判別』を確認します。

サンプルのセットアップを完了した時、FileInput ノード fileinput は、顧客オーダー 111 および 222 の配達の詳細を求めてディレクトリーをモニターします。

注: 顧客オーダーをどれほど迅速に処理依頼するかによって、2 つのオーダーの入力を行った時に、フローが両方のオーダーを含む単一バッチの送り状出力メッセージを生成する場合と、それぞれのオーダーが個別のバッチに渡されて 2 つの送り状出力メッセージが生成される場合があります。

顧客オーダー 111 および 222 のサンプルを実行するには、次の情報を持つメッセージを、該当する WebSphere MQ キューに置く必要があります。

サンプルをセットアップする時に作成したディレクトリーに顧客番号オーダー・ファイルを置く必要があります。

顧客オーダー 111 および 222 のサンプルを実行するには、次のようにします。

  1. 111.order および 222.order の内容を、セットアップ手順 (Collector ノードのサンプルのセットアップを参照) で作成したディレクトリーに保存する必要があります。ファイルは、111.order および 222.order という名前で保存します。このディレクトリーは、2 つのオーダー・ファイルと共に、FileInput ノード fileinput によってモニターされます。 この操作によって、オーダーの詳細がファイルとしてフローに送信され、そのファイル名から顧客番号が決まります。

    注: メッセージ・フローが実行中の場合は、111.order および 222.order ファイルは読み取られてからほぼ即時に除去されるので、これらのファイルは表示されなくなります。

  2. CollectorNodeSampleFlowProject/CollectorNodeSample_111_222_orders.mbtest ファイルを開きます。このファイルには、111 および 222 のオーダーに対する WebSphere MQ のコスト計算メッセージとパッケージング・メッセージを順に送信する、1 つの「起動」および 3 つの「エンキュー」が含まれています。顧客番号は、メッセージの CustomerNumber フィールドで特定されます。
  3. 「起動」を選択し、「メッセージの送信」をクリックして、オーダー 111 のコスト計算をキュー COLL_IN1 に送信します。
    <Costing>
      <CustomerNumber>111</CustomerNumber>
      <Product>Toaster</Product>
      <UnitPrice>4.99</UnitPrice>
    </Costing>
    
    この操作によって、すべての出力キューおよび有効期限キュー上のメッセージを 5 分間継続して listen するよう構成されたテスト・クライアントの WebSphere MQ メッセージ・リスナーも開始されます。すべてのメッセージが処理されたら、リスナーを終了するため、任意の時点で「停止」(メッセージ・テスト・フロー・イベント・ツールバーにある青色の四角いボタン) をクリックします。
  4. 最初の「エンキュー」を選択し、「メッセージの送信」をクリックして、オーダー 111 のパッケージング・メッセージをキュー COLL_IN3 に送信します。
    <Packaging>
      <CustomerNumber>111</CustomerNumber>
      <Postage>1.95</Postage>
    </Packaging>
    
  5. 2 番目の「エンキュー」を選択して、「メッセージの送信」をクリックし、オーダー 222 のコスト計算メッセージをキュー COLL_IN1 に送信します。
    <Costing>
       <CustomerNumber>222</CustomerNumber>
       <Product>Food Processor</Product>
       <UnitPrice>35.99</UnitPrice>
    </Costing>
    
  6. 3 番目の「エンキュー」を選択し、「メッセージの送信」をクリックして、オーダー 222 のパッケージング・メッセージをキュー COLL_IN3 に送信します。
    <Packaging>
      <CustomerNumber>222</CustomerNumber>
      <Postage>5.55</Postage>
    </Packaging>
    
  7. 最初の Collector ノード CollectByCustNum は、対応するコスト計算メッセージを COLL_IN1 から、オーダー・ファイルを fileinput から、パッケージング・メッセージを COLL_IN3 から収集し、その集合を伝搬することによって Compute1 ノード内の ESQL を使用可能にして、送り状メッセージを生成します。この送り状メッセージは、2 番目の Collector ノード CollectUntilTrigger に伝搬されます。この操作は、オーダー 222 のメッセージに対しても発生します。
  8. 90 秒のインターバルが経過するたびに、TimeoutNotification のノード TimerTrigger は、2 番目の Collector ノード CollectUntilTrigger をトリガーします。CollectUntilTrigger は、毎回の収集タイムアウト期間中 (30 秒間) に送り状バッチ・メッセージに収集された送り状メッセージを伝搬します。
  9. 2 番目の Collector ノード CollectUntilTrigger による伝搬が行われると、「起動」操作の結果として開始されたテスト・クライアントの WebSphere MQ リスナーによって結果出力メッセージが検出され、キュー COLL_OUT で受信されたメッセージが表示されます。通常、2 つのオーダーは、以下のメッセージのように単一のバッチ・メッセージ内に出力されます。
    <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 つの別個の送り状メッセージを受信することになります。

2 番目の顧客オーダー 333 を送信するためにサンプルを実行する

  1. 333.order の内容を、セットアップ手順で作成したディレクトリーに保存します。以下に例を示します。

    注: メッセージ・フローが実行中の場合は、333.order ファイルは読み取られてからほぼ即時に除去されるので、このファイルは表示されなくなります。

  2. CollectorNodeSampleFlowProject/CollectorNodeSample_333_orders.mbtest ファイルを開きます。このファイルには、333 のオーダーに対する WebSphere MQ のコスト計算メッセージとパッケージング・メッセージを順に送信する、1 つの「起動」および 1 つの「エンキュー」が含まれています。
  3. 「起動」を選択し、「メッセージの送信」をクリックして、オーダー 333 のコスト計算をキュー COLL_IN1 に送信します。
    <Costing>
      <CustomerNumber>333</CustomerNumber>
      <Product>Kettle</Product>
      <UnitPrice>5.99</UnitPrice>
    </Costing>
    
    この操作によって、すべての出力キューおよび有効期限キュー上のメッセージを 5 分間継続して listen するテスト・クライアントの WebSphere MQ メッセージ・リスナーも開始されます。すべてのメッセージが処理されたら、リスナーを終了するため、任意の時点で「停止」(メッセージ・テスト・フロー・イベント・ツールバーにある青色の四角いボタン) をクリックします。
  4. 「エンキュー」を選択し、「メッセージの送信」をクリックして、オーダー 333 のパッケージング・メッセージをキュー COLL_IN3 に送信します。
    <Packaging>
      <CustomerNumber>333</CustomerNumber>
      <Postage>2.05</Postage>
    </Packaging>
    
  5. 333.order ファイルを、セットアップ手順で作成したディレクトリーに保存します。
  6. メッセージおよびファイルが処理され、そのバッチ処理の後で、333 の送り状を含む出力送り状バッチが「起動」操作の結果として稼働しているテスト・クライアントのリスナーによって受信され、表示されます。
    <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>
    

3 つのオーダーの出力

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 に到着する順序が定まらないためです。

フロー中の Trace ノードによって作成されるトレース・ファイル

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 分を超える時間がかかる場合もあります。

サンプルのホームに戻る