Event Driven Architectureが発表されたので触ってみるで見た、Event Driven Architectureの、エラー処理とタイムアウトの動作を確認する。
環境情報
ODC Studio(Version 1.4.2)
Event Handlerでハンドルされない例外⇒最大10回リトライ
動作確認用の実装
シンプルなEventを作り、そのHandlerを確実に失敗するように作る。
Event Handlerを失敗させ、リトライの動作確認をする。
Event
Event Handler
処理が流れると、自動的にRaise Exceptionにたどり着き、例外が発生する。
Exception Handlerを置いていないため、このActionは例外で終了する。
Ifでは、Boolean型のSettingをチェックし、Trueになったら正常終了させる。これは、万が一に備えての予備的なロジック。無制限かつ短期間にリトライする仕組みであったら、ODC Portalから止めるために入れておいた。先頭のSleepも同じ理由で、共用の環境に過負荷をかけないようにおいてある。
動作確認
↑の実装を行ったEventをTriggerし、ODC PortalのTraceに表示された記録は以下の通り。計11回の実行が記録された。当初の1回の実行+エラー時の最大10回のリトライ。
リトライの間隔は、
最初の1回:数秒
2回目:2分
3回目:6分
4回目:14分
5回目以降:30分
と徐々に広がり、30分で打ち止めになる。
Event Handlerのタイムアウト⇒2分
動作確認用の実装
Settingで指定した秒数分だけSleepするEvent Handlerを作成する。
Sleepする時間を変更しながらログを確認し、Event Handlerのタイムアウト時間を探る。
Event
Event Handler
処理としては、Setting SecondsToSleepに設定した秒数分Sleepするだけ。動作していることをODC Portal > Logsから確認できるように、開始時と終了時にLogMessageでその時点の日時を出力している。
動作確認
110秒Sleep ⇒ 正常に終了する
ODC Portal > Logsで開始ログ・終了ログともに出力されている。つまりEvent Handlerは実行に110秒かかってもタイムアウトしない。
130秒Sleep ⇒ タイムアウトする
ODC Portal > Logsで開始ログが出力された2分後に再び開始ログが出力される。これはタイムアウトによってリトライされたことを示す。
以下のイベント実行のログ(「OS-BERT-61600 - Error while handling event.
The event execution exceeded the 120-second timeout.」)からも、2分でタイムアウトになったことが確認できる。