Qntrl Circuitでは、サーキットの作成時にエラー処理を設定できます。ステート定義のエラーは、サーキットを保存する前に検出されます。サーキットを保存するとコンパイルチェックが実行され、ステートの設定、ロジックフロー、設計に関するエラーが一覧表示されます。これにより、実行前にサーキットの設計と設定のエラーを確認して修正できます。
Function、Webhook、Circuitなどの機能ステートでのみ実行時エラーが発生するため、エラー処理は機能ステートでのみサポートされています。機能ステートを追加すると、右側のパネルの[設定]の下に[エラー処理]オプションが表示されます。
実行時エラーのシナリオ
実行時エラーは4つのシナリオに分類され、それぞれに[再試行]と[フォールバック]のエラー処理オプションがあります。
-
タイムアウト時
-
認証失敗時
-
実行失敗時
-
カスタムエラー
タイムアウト時
機能ステートの実行が想定時間を超えると、タイムアウトエラーが発生します。このオプションはFunction とWebhookで利用できます。コードビューでタイムアウトエラーを処理する場合、項目値'errorType': 'Error.TimeOut' が追加されます。
認証失敗時
指定したコードにアクセスする権限が不足しているためにステートが失敗した場合、そのエラーは認証失敗として処理されます。このオプションはWebhook ステートでのみ利用できます。コードビューでは、名前の値 'errorType': 'Error.AuthorizationFailure'が追加されます。
実行失敗時
処理できない例外によってステートの実行が失敗した場合、実行失敗として処理できます。コードビューでは、名前の値 'errorType': 'Error.ExecutionFailure' が追加されます。
カスタムエラー
再試行とフォールバックのオプションに加えて、エラーコードまたはエラーメッセージを使用して関数内の例外を処理できます。カスタムエラーを設定するには、カスタムエラーのセクションを参照してください。
エラー処理オプション
いずれかのエラー処理オプションを選択すると、すべてのエラー処理オプションで共通の[再試行]項目と[フォールバック]項目を含むポップアップが表示されます。
再試行
失敗したステートを、事前に定義した間隔で指定した回数だけ再試行できます。
再試行は3つの項目で構成されます。
たとえば、[遅延]を5秒、[試行回数]を3、[ステップ遅延]を2に設定した場合:
新しい遅延時間 = 遅延 * ステップ遅延 ^ (試行回数 - 1)
-
1回目の試行 --> 5秒 * (2^0) = 5秒
-
2回目の試行 --> 5秒 * (2^1) = 10秒
-
3回目の試行 --> 5秒 * (2^2) = 20秒
最初の再試行は5秒後、2回目は10秒後、3回目は20秒後に実行されます。
フォールバック
失敗またはエラーが発生した場合、失敗したステートを別のステートにフォールバックして実行を継続できます。フォールバックを設定するには、次の2つの項目を設定します。
-
[次へ]:失敗したステートの入力とエラー出力を渡す先のステート名を設定します。
-
[結果]:エラーの詳細を取得する項目名を設定します。
-
[エラーパス]:失敗時のエラーレスポンスをマッピングし、次のステートへの入力を指定します。
-
[エラーセレクター]:前のステートの入力と統合してフォールバックステートに遷移できるエラーレスポンスを設定します。
カスタムエラー
カスタムエラー処理では、[例外の種類]と[例外値]を設定する必要があります。
-
[エラー処理]の下にある[+カスタムエラーを追加]オプションをクリックします。ポップアップが表示されます。
-
[例外]で、エラー処理に使用する[エラーコード/エラーメッセージ]をドロップダウンから選択します。
-
次の項目に、ステート出力でエラーコードまたはエラーメッセージを受け取るパス/値を入力します。
初期設定では、カスタムエラー名は、設定されているカスタムエラーの数に応じてエラー1、エラー2、またはエラー3に設定されます。デフォルト名を変更するには、編集アイコンをクリックして名前を指定します。
コードビューのカスタムエラーでは、名前の値として'errorType': 'Error.Custom'が追加されます。次のサンプルの状態では、タイムアウト時とカスタムエラーをコードビューで処理する例を以下に示します。
{
'Function for stock status': {
'type': 'function',
'next': 'End',
'start': true,
'function_id': 'updatestockstatus_71',
'on_error': [
{
'error_type': 'timeout_error',
'retry': {
'delay': 3,
'attempt': 3,
'step_delay': 1
},
'fallback': {
'next': 'End',
'error_path': '$.error3'
}
},
{
'error_type': 'custom_error',
'error_name': 'Error 1',
'error_code': '101',
'retry': {
'delay': 3,
'attempt': 3,
'step_delay': 1
},
'fallback': {
'next': 'End',
'error_path': '$.Error'
}
}
]
}
}