集約のタイムアウトの設定

集約ノードの 2 つのプロパティーを使用して、 集約されるメッセージを処理するためのタイムアウト値を設定することができます。

始める前に:

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

タイムアウトの使用が必要な 2 つの状況があります。

  1. 集約された応答メッセージを一定の時間内に受け取ることが必要な状況があるかもしれません。 戻りが遅い応答メッセージや、まったく戻ってこない応答メッセージがあるかもしれません。 このような場合は、以下のようにします。
    1. 「ブローカー・アプリケーション開発 (Broker Application Development)」パースペクティブに切り替えます。
    2. ファンアウト・メッセージ・フローを開きます。
    3. このような場合は、AggregateControl ノードの「タイムアウト (Timeout)」 プロパティーを設定して、ブローカーが応答を待機する秒数を指定します。 デフォルトでは、このプロパティーは 0 に設定されています。 これは、タイムアウトなしで、ブローカーが無期限で待機することを意味します。

    タイムアウトのインターバルが経過したのにすべての応答が到着していない場合は、 到着した応答が、対応する AggregateReply ノードによって、集約された応答メッセージにされ、 そのノードの timeout ターミナルに伝搬されます。 必要であれば、この部分的な応答メッセージは、集約された完全な応答メッセージと同様に処理できます。 必要であれば、未完了の集約された応答の特殊処理を提供することができます。

  2. メッセージが AggregateReply ノードの in ターミナルに到着すると、 それが予期された応答メッセージかどうかが検査されます。 認識されない場合、そのメッセージは unknown ターミナルに伝搬されます。 次の場合、これを行うまでブローカーを一定の時間待機させたいと思うかもしれません。
    • 応答メッセージの到着が、AggregateRequest ノードによって実行された作業がトランザクションとしてコミットされる前だった場合。
    • 応答メッセージの到着が、制御メッセージの到着する前だった場合。

    これらの状況が最も生じやすいのは要求メッセージを同期点以外から送信した場合です。 結果として、有効な応答が unknown ターミナルに送信されることがあります。 このイベントが生じる可能性を低くするには、以下のようにします。

    1. 「ブローカー・アプリケーション開発 (Broker Application Development)」パースペクティブに切り替えます。
    2. ファンイン・メッセージ・フローを開きます。
    3. AggregateReply ノードの「不明なメッセージ・タイムアウト (Unknown Message Timeout)」プロパティーを設定します。 このプロパティーを設定すると、有効な応答として即時に認識されなかったメッセージが、 指定の秒数に渡ってブローカーの内部に保留されます。

    不明タイムアウトのインターバルが満了してもメッセージが認識されている場合、メッセージは処理されます。 ノードは、以前は不明だったメッセージが有効なメッセージが集約の完成に必要な 最後の応答であるかどうかを調べるために検査を行います。 もしそうであれば、集約応答メッセージが構成されて、伝搬されます。

    不明タイムアウトのインターバルが満了してもメッセージが依然として認識されていない場合、 メッセージは以前と同様 unknown ターミナルに伝搬されます。

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

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

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