ファンアウトおよびファンイン集約フローの関連付け

集約フローにおける AggregateControl ノードと AggregateReply ノードの 「集約名 (Aggregate Name)」プロパティーを同じ値に設定することによって、ファンアウト・メッセージ・フロー処理を対応するファンイン・メッセージ・フロー処理に関連付けます。

始める前に:

このタスクを実行するには、以下のタスクを完了している必要があります。

「集約名 (Aggregate Name)」は、 ブローカー内でコンテキストに応じて固有でなければなりません。 一般にこれは、特定の「集約名 (Aggregate Name)」を持つ AggregateControl ノードと AggregateReply ノードがそれぞれ 1 つずつしか存在できないということですが、同一の「集約名 (Aggregate Name)」を持つ複数の AggregateControl ノードが存在することも可能です (複数の AggregateControl ノードの使用を参照してください)。

同じメッセージ・フロー内に、または 2 つの異なるメッセージ・フローに、 ファンアウトおよびファンインを作成することができます。 いずれにせよ、ファンアウト・フローの AggregateControl ノードを ファンイン・フローの AggregateReply ノードに接続すると、集約の 2 つの部分はリンクされます。

集約フローを構成する方法は、以下のような要因によって決まります。

簡単なケースの場合は単一のフローを使用する方がインプリメントが容易ですが、このアプローチにはいくつかの制限があります。一般的に言って、2 つのメッセージ・フローを使用した方が柔軟性が高まるので、通常はこちらの方がより好ましいアプローチです。 航空機 (Airline) サンプルは、集約の 2 つの別個のフローの使用を示しています。

ファンアウト・フローをファンイン・フローと関連付けるには、以下のようにします。

  1. 「ブローカー・アプリケーション開発 (Broker Application Development)」パースペクティブに切り替えます。
  2. 単一のメッセージ・フローにファンアウトおよびファンイン・フローを作成した場合、以下のようにします。
    1. 集約メッセージ・フローを開きます。
    2. 関連付けを行うには、 AggregateControl ノードの制御ターミナルを AggregateReply ノードの制御ターミナルに接続します。

    これは、2 つの集約ノード間の直接接続と呼ばれます。

  3. ファンアウト・メッセージ・フローとファンイン・メッセージ・フローを別々に作成した場合は、以下のようにします。
    1. ファンアウト・メッセージ・フローを開きます。
    2. 集約ファンアウト・フローの作成で説明されているように、AggregateControl ノードを構成します。
    3. 制御メッセージの中間宛先を表す出力ノードを構成します。 たとえば、制御メッセージを中間 WebSphere MQ キューに送信したい場合には、MQOutput ノードを組み込み、基本プロパティー「キュー・マネージャー名 (Queue Manager Name)」および「キュー名 (Queue Name)」内のターゲット・キューを識別します。
    4. オプション: 制御メッセージを含む有効な出力メッセージを作成する Compute ノードを構成します。 たとえば、制御メッセージを MQOutput ノードに渡す場合、 MQMD をメッセージに追加するように Compute ノードを構成し、 そのヘッダー内の必須フィールドを完成させてください。

      たとえば、次の ESQL をコーディングすることができます。

      SET OutputRoot.MQMD.StrucId = MQMD_STRUC_ID;
      SET OutputRoot.MQMD.Version = MQMD_CURRENT_VERSION;
      SET OutputRoot.MQMD.Format = MQMD_STRING;
    5. AggregateControl ノードの制御ターミナルを、 制御メッセージの中間宛先を表す出力ノードの in ターミナルに接続します。 Compute ノードを組み込んだ場合、 AggregateControl ノードの制御ターミナルを Compute ノードの in ターミナルに、 Compute ノードの out ターミナルを、 制御メッセージの中間宛先を表す出力ノードの in ターミナルに接続します。
    6. ファンイン・メッセージ・フローを開きます。
    7. 集約ファンイン・フローの作成で説明されているように、 応答メッセージを受信するように少なくとも 1 つの入力ノードを構成します。
    8. AggregateControl ノードから制御情報を受信するように入力ノードを構成します。 たとえば、中間 WebSphere MQ キューから制御メッセージを受信するように MQInput ノードの基本プロパティー「キュー名 (Queue Name)」 を設定します。
    9. AggregateReply ノードの制御ターミナルに制御メッセージを受信する入力ノードの out ターミナルを接続します。

    これは、2 つの集約ノード間の間接接続と呼ばれます。

ファンアウトとファンインの両方を含むシングル・メッセージ・フローの利点は次のとおりです。

別個のファンアウトおよびファンインを作成することには次の利点があります。

メッセージ・フローの保守

メッセージ・フローの存続期間中に、しばしばその操作を中断して、 設計を変更し、再デプロイすることが必要になります。 メッセージ・フローに集約が含まれている場合、操作を 2 つのステージに分けて中断すると便利です。

  1. ファンアウト・ステージを中断して、これ以上要求が送信されないよう停止し、すべての未解決の要求がファンイン・ステージでサービスを受けるのを待ちます。
  2. 未解決の集約がなくなったら、ファンイン・ステージを中断します。

この 2 ステージのシャットダウンは、予測可能な方法で確実にタイムアウトを実施するのに使用します。 ファンアウト・ステージとファンイン・ステージが同じメッセージ・フローにある場合、 この方法でシャットダウンするのが困難な場合があります。 基盤となるトランスポートが WebSphere MQ の場合は、 関係するキューで get/put 操作を禁止することにより、これをある程度まで実現できます。 その他のトランスポートにも、類似の機能があることでしょう。

関連概念
メッセージ・フロー
メッセージ・フローの集約

関連タスク
集約フローの構成
集約ファンアウト・フローの作成
集約ファンイン・フローの作成
集約のタイムアウトの設定
複数の AggregateControl ノードの使用
集約フロー内の例外およびデータベース・デッドロックの処理
メッセージ・フローの設計
メッセージ・フローの作成
メッセージ・フローの内容の定義

関連資料
AggregateControl ノード
AggregateReply ノード
AggregateRequest ノード