集約ファンイン・フローの作成

集約ファンイン・フローは、ファンアウト・フローにより送信された要求メッセージへの応答を受信し、受信されたすべての応答を含む結合された応答メッセージを構成します。

始める前に:

同じメッセージ・フロー内にファンアウトおよびファンイン・フローを組み込むことは可能です。ただし、2 つの別々のフローを作成してもかまいません。 別個のメッセージ・フローを構成することの利点について詳しくは、ファンアウトおよびファンイン集約フローの関連付けを参照してください。同じファンイン・フローの複数のコピーを同じ実行グループまたは別の実行グループ内にデプロイしないでください。

ファンアウト・フローをトランザクションに構成しない場合は、指定したタイムアウト値が原因で、結合された応答メッセージが、すべての応答がファンイン・フローによって受信される前に生成されることもあります。 詳しくは、集約ファンアウト・フローの作成を参照してください。

ファンイン・フローの例について検討するには、以下のサンプルを参照してください。 サンプルは、Message Brokers Toolkit と統合されているインフォメーション・センターを使用する場合にのみ表示できます。

ファンイン・フローを作成するには、以下のようにします。

  1. 「ブローカー・アプリケーション開発」パースペクティブに切り替えます。
  2. ファンイン処理を提供するためにメッセージ・フローを作成します。
  3. 以下のノードをエディター・ビューに追加して、以下に示されているとおりにこれらを構成および接続します。
    Input ノード
    入力ノードは、ファンアウト・フローから生成された多重要求メッセージに対する応答を受信します。

    このノードは、MQInput ノードなどの、 要求/応答モデルをサポートする入力ノード、あるいはこれらのノードの混合でなければなりません (これらの応答を送信するアプリケーションの要件に応じて異なります)。 それぞれの入力ノードによって受信された応答は、対応する要求と同じプロトコルを介して送信されなければなりません。例えば、 ファンアウト・フロー内に MQOutput ノードを組み込む場合には、その要求への応答は、 このファンイン・フロー内の MQInput ノードによって受信されなければなりません。

    1. 入力ノードを選択して「プロパティー」ビューをオープンするか、またはノードを右クリックして「プロパティー」をクリックし、「プロパティー」ダイアログを表示します。 ノードのプロパティーが表示されます。
    2. このノードの入力メッセージのソースを指定します。 例えば、MQInput ノードがメッセージの取り出し元とする基本プロパティー「キュー名」内に、WebSphere® MQ キューの名前を指定します。
    3. オプション: このノードのために構成したいその他のプロパティーの値を指定します。
    4. 入力ノードの Out ターミナルを、AggregateReply ノードの In ターミナルに接続します。

      このようにしてターミナルを接続し、最も単純な構成を作成します。適当であれば、 入力ノードと AggregateReply ノードとの間に他のノードを組み込むことができます。 例えば、監査のために応答を (Warehouse ノードに) 保管したい場合もあります。

    前述のとおり、ファンイン・フローの先頭で集約応答メッセージのすべてを受け取る 1つの入力ノードを組み込みます。複数の入力ノードを組み込むと、特定の応答入力ノードによって開始されたスレッドがメッセージ・フローの集約と実行を完了できる一方で、他のスレッドは応答メッセージを AggregateReply ノードに送信し、タイムアウトになる可能性が発生します。各集約ごとの応答の順次処理を可能にするには、1 つの入力ノードを使用する必要があります。その 1 つのノードの処理スループットを拡張するために、追加のインスタンスを指定します。構成可能なメッセージ・フロー・プロパティーを参照してください。

    AggregateReply ノード
    AggregateReply ノードは、In ターミナルを介して入力ノードからインバウンド応答を受信します。 AggregateReply ノードは、以降の処理のためにそれぞれの応答メッセージを保管します。

    集約要求の特定のグループに対するすべての応答が収集されると、AggregateReply ノードは、 集約された応答メッセージを作成し、Out ターミナルを介して集約された応答メッセージを伝搬します。

    1. AggregateReply ノードを選択して「プロパティー」ビューをオープンするか、またはノードを右クリックして「プロパティー」をクリックし、「プロパティー」ダイアログを表示します。 ノードのプロパティーが表示されます。
    2. この集約を識別するには、AggregateReply ノードの「集約名」>プロパティーを設定します。この値が、ファンアウト・フロー内の対応する AggregateControl ノードにある 「集約名」プロパティーに対する値と同じになるよう設定してください。
    3. オプション: 認識できないメッセージを Unknown ターミナルに伝搬する前にそのメッセージを保存する場合は、「不明なメッセージ・タイムアウト」プロパティーの値を設定してください。別個のファンアウトおよびファンイン・フローを使用する場合、制御メッセージが遅延する可能性があれば、この値をゼロ以外の数に設定します。
    4. オプション: 認識されないメッセージを明示的に処理するには、別のノードまたはノードのシーケンスに不明なターミナルを接続してください。メッセージ・フロー内の別のノードにこのターミナルを接続しない場合には、このターミナルを介して伝搬されるメッセージは廃棄されます。
    5. オプション: AggregateControl ノードでこの集約のタイムアウト値を指定し、 すべての応答が受信される前に有効期限が切れるタイムアウトを明示的に処理したい場合は、 タイムアウト・ターミナルを別のノードまたはノードのシーケンスに接続してください。 タイマーが切れる場合、部分的に完全な集約された応答は、タイムアウト・ターミナルに送信されます。 メッセージ・フロー内の別のノードにこのターミナルを接続しない場合には、このターミナルを介して伝搬されるメッセージは廃棄されます。
    6. オプション: このノードのために構成したいその他のプロパティーの値を指定します。
    7. AggregateReply ノードの Out ターミナルを Compute ノードの In ターミナルに接続します。
    重要: AggregateReply ノードの制御ターミナルは、バージョン 6.0 では非推奨ターミナルとなるので、デフォルトでは、このターミナルへの接続は (直接または間接のいずれも) 無視されます。 この変更は集約フローの効率を最大化し、集約の信頼性を損ないません。 この構成は、最適な内容を提供します。

    ただし、ファンアウト・フロー上の対応する AggregateControl ノードによって送信された制御メッセージを、 制御ターミナル上で AggregateReply ノードが受け取るようにしたい場合、 集約ファンアウト・フローの作成で説明されているように、必要な接続を作成しなければなりません。 AggregateReply ノードから出力ノードへのパスは、可能な限り直接的なものにして、集約のパフォーマンスを最大化してください。 この制御メッセージの内容を変更しないでください。

    さらに、制御ターミナルとそこへの接続を認識させるには、環境変数 MQSI_AGGR_COMPAT_MODE を使用可能にする必要があります。 このオプションを選択した場合は、メッセージ集約のパフォーマンスおよび動作が影響を受ける可能性があります。これらの影響および環境変数の完全な説明については、集約フローでの制御メッセージの使用を参照してください。

    Compute ノード
    Compute ノードは結合された応答を含むメッセージを受信します。 一般的に、この結合メッセージのフォーマットは、出力に対して無効です。 これは、集約応答メッセージが独特の構造であり、一部のノード (MQOutput ノードなど) で必要なビット・ストリームに解析できないためです。 Out およびタイムアウト・ターミナルは、常に集約応答メッセージを伝搬するため、 MQOutput ノードに伝搬する前に常に追加の処理が必要になります。 したがって、Compute ノードを組み込み、このノードを有効な出力メッセージを作成するよう構成する必要があります。
    1. Compute ノードを選択して「プロパティー」ビューをオープンするか、またはノードを右クリックして「プロパティー」をクリックし、「プロパティー」ダイアログを表示します。 ノードのプロパティーが表示されます。
    2. 基本プロパティー「ESQL モジュール」内にこのノードの機能をカスタマイズする ESQL モジュールの名前を指定します。
    3. ノードを右クリックし、「ESQL のオープン」をクリックして、このノードのモジュールを含む ESQL ファイルを開きます。 ESQL エディター・ビューでモジュールが強調表示されます。
    4. 入力メッセージ内の集約された応答から単一の出力メッセージを作成するように ESQL をコーディングします。

      Out ターミナルを介して伝搬される集約された応答メッセージ。その内容にアクセスする方法については、結合メッセージの内容へのアクセスを参照してください。

    5. オプション: このノードのために構成したいその他のプロパティーの値を指定します。
    6. Compute ノードの Out ターミナルを、単一の応答メッセージの宛先を表す出力ノードの In ターミナルに接続します。
    Output ノード
    ファンイン・フローの出力ノードを組み込みます。 このノードは、組み込みノードのいずれかまたはユーザー定義の出力ノードにすることができます。
    1. 出力ノードを選択して「プロパティー」ビューをオープンするか、またはノードを右クリックして「プロパティー」をクリックし、「プロパティー」ダイアログを表示します。 ノードのプロパティーが表示されます。
    2. このノードの出力メッセージの宛先を指定します。 例えば、MQOutput ノードのメッセージの送信先となる基本プロパティー「キュー名」内に WebSphere MQ キューの名前を指定します。
    3. オプション: このノードのために構成したいその他のプロパティーの値を指定します。
  4. Ctrl+S を押すか、またはタスクバー・メニューで「ファイル」 > 「保存: name (name はメッセージ・フローの名前) をクリックして、メッセージ・フローを保存し、その構成を検証します。

結合メッセージの内容へのアクセス

AggregateReply ノードは、 ComIbmAggregateReplyBody と呼ばれる Root の下の結合メッセージ・ツリー内にフォルダーを作成します。 ノードは、このフォルダーの下に、AggregateRequest ノードで設定した名前を使用して、いくつかのサブフォルダーを作成します。これらのサブフォルダーには、関連する応答メッセージが読み込まれます。

例えば、要求メッセージが次のフォルダー名を持つとします。

  • TAXI
  • HOTEL

結果として AggregateReply ノードによって作成される集約応答メッセージは、以下の例のような構造になります。

これは、Root の下のエレメント ComIbmAggregateReplyBody の下に作成された、 集約されたメッセージ内容のツリーのダイアグラムです。 その内容は、これを囲むテキストで説明されています。

Compute ノード内の ESQL を使用して、 タクシー会社からの応答にアクセスするには、次の相関名を使用します。

InputRoot.ComIbmAggregateReplyBody.TAXI.xyz

フォルダー名は固有でなくてかまいません。 フォルダー名が TAXI の要求が複数ある場合、配列添え字表記法を使用して個々の応答にアクセスできます。以下に例を示します。

InputRoot.ComIbmAggregateReplyBody.TAXI[1].xyz
InputRoot.ComIbmAggregateReplyBody.TAXI[2].xyz
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
最終更新 : 2009-02-20 12:42:50

ac12300_