集約ノードの 2 つのプロパティーを使用して、集約されるメッセージを処理するためのタイムアウト値を設定することができます。
始める前に:
このタスクを完了するには、以下のタスクを完了している必要があります。
タイムアウトの使用が必要な 2 つの状況があります。
- 集約された応答メッセージを一定の時間内に受け取ることが必要な状況があるかもしれません。
戻りが遅い応答メッセージや、まったく戻ってこない応答メッセージがあるかもしれません。
このような場合は、以下のようにします。
- 「ブローカー・アプリケーション開発」パースペクティブに切り替えます。
- ファンアウト・メッセージ・フローを開きます。
- このような場合は、AggregateControl ノードの「タイムアウト」プロパティーを設定して、ブローカーが応答を待機する秒数を指定します。
デフォルトでは、このプロパティーは 0 に設定されています。
これは、タイムアウトなしで、ブローカーが無期限で待機することを意味します。
タイムアウトのインターバルが経過したのにすべての応答が到着していない場合は、到着した応答が、対応する AggregateReply ノードによって、集約された応答メッセージにされ、そのノードの timeout ターミナルに伝搬されます。
必要であれば、この部分的な応答メッセージは、集約された完全な応答メッセージと同様に処理できます。
必要であれば、未完了の集約された応答の特殊処理を提供することができます。
- メッセージが AggregateReply ノードの in ターミナルに到着すると、それが予期された応答メッセージかどうかが検査されます。
認識されない場合、そのメッセージは unknown ターミナルに伝搬されます。
次の場合、これを行うまでブローカーを一定の時間待機させたいと思うかもしれません。
- 応答メッセージの到着が、AggregateRequest ノードによって実行された作業がトランザクションとしてコミットされる前だった場合。
この状況は、集約ファンアウト・フローの作成で説明されているとおりに、入力ノードの「トランザクション・モード」プロパティーを構成することで回避できます。
- 応答メッセージの到着が、制御メッセージの到着する前だった場合。
この状況は、AggregateControl ノードの制御ターミナルを未接続のままにしておくことで回避できます。
制御ターミナルの接続の影響の詳細については、集約フローでの制御メッセージの使用を参照してください。
これらの状況が最も生じやすいのは要求メッセージを同期点以外から送信した場合です。
結果として、有効な応答が unknown ターミナルに送信されることがあります。
このイベントが生じる可能性を低くするには、以下のようにします。
- 「ブローカー・アプリケーション開発」パースペクティブに切り替えます。
- ファンイン・メッセージ・フローを開きます。
- AggregateReply ノードの「不明なメッセージ・タイムアウト」プロパティーを設定します。
このプロパティーを設定すると、有効な応答として即時に認識されなかったメッセージが、指定の秒数に渡ってブローカーの内部に保留されます。
不明タイムアウトのインターバルが満了してもメッセージが認識されている場合、メッセージは処理されます。
ノードは、以前は不明だったメッセージが有効なメッセージが集約の完成に必要な最後の応答であるかどうかを調べるために検査を行います。
もしそうであれば、集約応答メッセージが構成されて、伝搬されます。
不明タイムアウトのインターバルが満了してもメッセージが依然として認識されていない場合、メッセージは以前と同様 unknown ターミナルに伝搬されます。