非同期アプリケーション連携実行基盤のタイマ監視および関連する処理時間には、以下の項目があります。設定可能なタイムアウトの値とその振舞いについて説明します。
フローのタイムアウト
処理結果のメッセージの受信待ちタイムアウト
結果受信キューに格納するメッセージの有効期間
アクティビティの処理時間
メッセージの滞留時間
■フローのタイムアウト
非同期アプリケーション連携実行基盤では、フロー起動APIによって起動するフロー処理ごとに、フロー起動時間からのタイムアウト時間を設定することができます。
フロー処理中に使用するキューが一時的に閉塞している場合や、フロー処理が一定時間を超えた場合、フローのタイムアウトの設定によりにフローを中断させ、任意の後処理を行うことが可能です。
なお、フローのタイムアウトが発生した場合の後処理については、フロー定義の異常処理定義で指定します。
◆設定項目
フローのタイムアウトの設定項目を以下に示します。
設定項目 | 説明 | 上段:省略値 |
---|---|---|
フローのタイムアウト時間 | フローを起動した直後からフローの終点のアクティビティでのメッセージ受信直後までの処理のタイムアウト時間を秒で指定します。 | 0(無制限) |
突き放し型フロー起動API(sendMessageメソッド)および待ち合わせ型フロー起動API(sendMessageSyncメソッド)でフローを起動する際に、以下のメソッドでフローのタイムアウトの設定を行います。
void setMessageTimeout(int timeout)
メソッドを発行しなかった場合は、フローのタイムアウトは行われません。
なお、APIの詳細については、“Interstage Business Application Server リファレンス”の“アプリケーションインタフェース”で“setMessageTimeoutメソッド”を参照してください。
◆タイムアウト判定箇所
非同期アプリケーション連携実行基盤ランタイムでは、以下のポイントでタイムアウト判定を行います。
メッセージ受信直後(非同期アプリケーション連携実行基盤ランタイム処理開始時点)
メッセージ送信直前(非同期アプリケーション連携実行基盤ランタイムがメッセージを送信する直前)
非同期アプリケーション連携実行基盤ランタイムでは、上記2箇所でタイムアウト判定を行います。フローの終点のアクティビティでは、メッセージ送信直前のタイムアウト判定は行わないため、タイムアウト範囲は、以下のようになります。
フロー起動APIによるフローの起動直後からフローの終点のアクティビティでのメッセージ受信直後まで
また、フローのタイムアウト発生時は、システムログへフローのタイムアウトが発生したことを示すメッセージを出力します。
注意
メッセージ送信直前(業務処理実行アプリケーション呼び出し後)にフローのタイムアウトが発生した場合、業務処理はロールバックされます。この場合、メッセージトラッキング機能で出力されるエラー詳細情報の処理状況(経路情報)において、エラーが発生した動作アプリケーションの“受信キューからの受信日時”には、業務処理のロールバック後に行われる後処理の日時が出力されます。
メッセージトラッキング機能の“宛先キューへの送信日時”とエラーが発生した動作アプリケーションの“受信キューからの受信日時”の間に大きな時間差がみられる場合は、フローのタイムアウトが発生した原因も含め、以下の問題も発生している可能性があります。
エラーが発生した動作アプリケーションに関連付けられたキューにメッセージが滞留し、処理が遅延している可能性があります。
キューにメッセージが滞留していないか、イベントサービスの状態(esmonitorコマンド)を確認してください。
業務処理実行アプリケーションで処理が遅延している可能性があります。
非同期アプリケーション連携実行基盤が提供する標準ログ機能の性能ログの利用や、業務処理実行アプリケーションにトレース情報を組み込むなどして、処理遅延の原因を特定してください。
標準ログの出力方法については、“Interstage Business Application Server 運用ガイド(アプリケーション連携実行基盤編)”を参照してください。
■処理結果のメッセージの受信待ちタイムアウト
非同期アプリケーション連携実行基盤では、フロー起動APIによって起動するフロー処理ごとに、処理結果のメッセージの受信待ちのタイムアウト時間を設定することができます。
待ち合わせ型フロー起動API(sendMessageSyncメソッド)で処理結果のメッセージを取得するまでに、設定したタイムアウト値を超えた場合に、APIはnullを返却します。
タイムアウトが発生しても、メッセージ処理には影響されず、メッセージ処理はそのまま続行されます。
◆設定項目
処理結果のメッセージの受信待ちタイムアウトの設定項目を以下に示します。
設定項目 | 説明 | 上段:省略値 |
---|---|---|
処理結果のメッセージの受信待ちのタイムアウト時間 | 待ち合わせ型のフロー起動時に、処理結果のメッセージの受信待ちのタイムアウト時間を秒で指定します。 | 60(秒) |
待ち合わせ型フロー起動API(sendMessageSyncメソッド)でメッセージを送信する際に、以下のメソッドでタイムアウトの設定を行います。
void setTimeout(int timeout)
なお、上記メソッドを発行しなかった場合は、タイムアウトは60秒となります。
タイムアウトが発生した場合は、別途、receiveMessageメソッドを用いて結果受信キューから処理結果のメッセージを取得する必要があります。
なお、APIの詳細については、“Interstage Business Application Server リファレンス”の“アプリケーションインタフェース”で、“setTimeoutメソッド”を参照してください。
注意
setTimeoutメソッドで指定するタイムアウト時間は、イベントサービスのイベントチャネルの設定“イベントデータ待ち合わせ時間”に依存します。“イベントデータ待ち合わせ時間”は、省略値が40秒であり、この場合、待ち合わせ型フロー起動API(sendMessageSyncメソッド)の受信タイムアウト契機は、setTimeoutメソッドで指定したタイムアウト時間と“イベントデータ待ち合わせ時間”に設定した値により、以下のように変化します。
「イベントデータ待ち合わせ時間 ≧ setTimeoutメソッドで指定するタイムアウト時間」の場合
待ち合わせ型フロー起動API(sendMessageSyncメソッド)の受信タイムアウトは、“イベントデータ待ち合わせ時間”に復帰します。
例)“イベントデータ待ち合わせ時間”が“40秒”、setTimeoutメソッドで指定するタイムアウト時間が“10秒”の場合は40秒で復帰します。(実際には、メッセージ送信にかかった時間が加算されます)
「イベントデータ待ち合わせ時間 < setTimeoutメソッドで指定するタイムアウト時間」の場合
待ち合わせ型フロー起動API(sendMessageSyncメソッド)の受信タイムアウトは、「イベントデータの待ち合わせ時間×チェック回数」後に復帰します。
例)“イベントデータ待ち合わせ時間”が“40秒”、setTimeoutメソッドで指定するタイムアウト時間が“50秒”の場合は80秒(40秒 * 2回)で復帰します。(実際には、メッセージ送信にかかった時間が加算されます)
setTimeoutメソッドで指定するタイムアウト時間には、10秒以上の値を設定することを推奨します。
5秒より小さい値を設定する場合は、essetcnfコマンドによりイベントサービスの構成情報の異常検出の間隔の設定値にも同じ値を設定してください。ただし、5秒(省略値)より小さい値を設定した場合、イベントチャネルのプロセスの負荷が上がり、性能が劣化する可能性があります。
CORBAサービス動作環境のクライアントタイムアウト時間より小さい値を指定してください(値の差が20秒以上になるように指定することを推奨します)。
待ち合わせ型フロー起動API(sendMessageSyncメソッド)で受信待ちタイムアウトによりnullが返却された場合に自動採番されたコリレーションIDを取得する方法については、“Interstage Business Application Server リファレンス”の“アプリケーションインタフェース”で“sendMessageSyncメソッド”を参照してください。
◆タイムアウト監視範囲
処理結果のメッセージの受信待ちタイムアウト(setTimeoutメソッドの設定値)とフローのタイムアウト(setMessageTimeoutメソッドの設定値)の両方を指定する場合は、以下の関係になるようにタイムアウト値を設定してください。
setTimeoutメソッドの設定値 > setMessageTimeoutメソッドの設定値
処理結果のメッセージの受信待ちタイムアウト値がフローのタイムアウト値より小さい場合、フローのタイムアウトが発生する前に処理結果のメッセージの受信待ちタイムアウトが発生することになり、待ち合わせ型フロー起動API(sendMessageSyncメソッド)でフローのタイムアウトにより業務が終了したことを示す処理結果のメッセージを獲得することができなくなります。
フローのタイムアウトの判定は、“■フローのタイムアウト”で示すように業務処理実行アプリケーションの呼び出し前と呼び出し後に行われます。この契機以外ではフローのタイムアウトの判定を行わないため、設定したフローのタイムアウト値で正確にフローのタイムアウトが発生しない場合があります。そのため、フローのタイムアウトの処理結果のメッセージを業務処理開始アプリケーションへ通知するまでには若干のタイムラグがあることを考慮し、setTimeoutメソッドの設定値はフローのタイムアウトの設定値に業務処理実行アプリケーションの想定される最大処理時間および若干の余裕値を加えた時間を設定してください。
■結果受信キューに格納するメッセージの有効期間
非同期アプリケーション連携実行基盤では、フロー定義単位に結果受信キューに格納するメッセージの有効期間を設定することができます。
結果受信キューにメッセージが滞留し、設定した有効期間を超えた場合、メッセージは自動的に削除されます。
◆設定項目
結果受信キューに格納するメッセージの有効期間の設定項目を以下に示します。
設定項目 | 説明 | 上段:省略値 |
---|---|---|
結果受信キューに格納するメッセージの有効期間 | 結果受信キューに格納するメッセージの有効期間を入力します。 | 0(無制限) |
設定の詳細については、“Interstage Business Application Server アプリケーション開発ガイド”の“終了”を参照してください。
メッセージが結果受信キューに格納されてから、設定した結果受信キューに格納するメッセージの有効期間を超過した場合は、メッセージは結果受信キューから削除されます。
■アクティビティの処理時間
アクティビティの処理時間は、以下の時間の総和です。
非同期アプリケーション連携実行基盤がメッセージを受信してからアプリケーションを呼び出すまでの時間
アプリケーションが業務処理を実行する時間
アプリケーションの業務処理が終了してから非同期アプリケーション連携実行基盤が次のアクティビティにメッセージを送信完了するまでの時間
■メッセージの滞留時間
メッセージの滞留時間は、業務処理実行アプリケーションの処理の遅延または業務処理実行アプリケーションに対応するIJServerが停止しているなどの理由により、業務処理実行アプリケーションの受信キューにメッセージが処理されず滞留している時間です。