フローのタイムアウト機能は、メッセージ発行ごとに有効期間を設定し、有効期間を過ぎたメッセージ処理を自動的に停止することができる機能です。
タイムアウトしたメッセージは、異常処理定義で指定された後処理が実施され、エラーメッセージ退避キューなどへの退避が行われます。
フローのタイムアウト機能の方式を以下に示します。
タイムアウト判定方式
メッセージの発行時間からタイムアウト時間の経過を絶対時間で判定する方式です。例えば、有効期間を30秒で指定し、10時00分00秒でメッセージが発行された場合、10時00分31秒以降で行われるタイムアウト判定処理でタイムアウトとなります。そのため、ルーティング中に閉塞状態のキューなどが存在した場合など、ほとんどルーティングされていないメッセージに対してタイムアウトとなる可能性があります。
有効期間の範囲は、メッセージの発行からフローの終点へメッセージが到達するまでの時間になります。メッセージ処理中にエラーが発生した場合の後処理や補償ルートのメッセージ処理中にタイムアウトの判定は行われません。
また、タイムアウトの判定は、アプリケーション連携実行基盤の実行環境が行いますので、アプリケーションに処理論理を記載する必要はありません。
上図で示すように、アプリケーション連携実行基盤がメッセージを受信時、および次のルーティング先へメッセージを送信する直前にタイムアウト判定を行います。そのため、キューにメッセージが滞留している間、およびアプリケーションの処理中などでタイムアウト判定は行われません。タイムアウト発生時は、syslogへタイムアウトが発生した旨のメッセージを出力します。
なお、アプリケーション連携実行基盤で発生するタイムアウトは上記のメッセージタイムアウト以外に、トランザクションタイムアウトとイベントデータの生存時間タイムアウトがあります。
トランザクションタイムアウト(T1)
キューからデータを受信し、業務処理の結果によりCommit、またはRollbackするまでの時間です。
イベントデータの生存時間(T2)
イベントデータが生存する時間です。キューへデータを送信し、該当のデータがキューから受信され、Commitするまでの時間です。この値は、T1より大きい必要があります。
フローのメッセージタイムアウト(T3)
フロー開始から完了までの時間です。この値は、T2の総合計よりも大きい必要があります。
T1の総和 < T2の総和 < T3