Skip to content

Error Handling

Retry, fallback, and circuit breaker patterns.

3 modules

ModuleDescription
サーキットブレーカーサーキットブレーカーパターンで連鎖的な失敗を防ぐ
フォールバック操作が失敗したときにフォールバック値を提供
リトライ設定可能なリトライロジックで操作をラップする

Modules

サーキットブレーカー

error.circuit_breaker

サーキットブレーカーパターンで連鎖的な失敗を防ぐ

Parameters:

NameTypeRequiredDefaultDescription
actionobjectYes-サーキットブレーカーで保護するアクション
circuit_idstringYes-サーキットブレーカーで保護するアクション
failure_thresholdnumberNo5このサーキットのユニークID(状態追跡用)
failure_window_msnumberNo60000失敗をカウントする時間枠
recovery_timeout_msnumberNo30000回復を試みる前の時間(半開状態)
success_thresholdnumberNo3サーキットを閉じるために半開状態で必要な成功リクエスト数
fallbackobjectNo-サーキットが開いているときの代替アクション
fallback_valueanyNo-サーキットが開いているときの代替アクション
track_errorsarrayNo[]サーキットが開いているときに返す静的な値

Output:

FieldTypeDescription
__event__stringこれらのエラーコードのみを閾値にカウント(空 = 全て)
resultanyルーティング用イベント(成功/サーキット開/フォールバック)
circuit_statestringアクションまたはフォールバックの結果
failure_countnumberサーキットの現在の状態(閉/開/半開)
last_failure_timestringウィンドウ内の現在の失敗回数
circuit_opened_atstring最後の失敗のタイムスタンプ

Example: Example

yaml
action: {"module": "http.post", "params": {"url": "https://api.example.com/submit"}}
circuit_id: example-api
failure_threshold: 5
failure_window_ms: 60000
recovery_timeout_ms: 30000

Example: Example

yaml
action: {"module": "http.get", "params": {"url": "https://api.example.com/data"}}
circuit_id: data-api
failure_threshold: 3
fallback: {"module": "cache.get", "params": {"key": "data_cache"}}

Example: Example

yaml
action: {"module": "database.query", "params": {"query": "SELECT * FROM users"}}
circuit_id: database
failure_threshold: 3
fallback_value: {"users": [], "from_cache": false}

フォールバック

error.fallback

操作が失敗したときにフォールバック値を提供

Parameters:

NameTypeRequiredDefaultDescription
operationobjectNo-試みるプライマリ操作
fallback_valueanyNo-試みるプライマリ操作
fallback_operationobjectNo-失敗時に返す静的な値
fallback_onarrayNo[]失敗時に実行する代替操作
include_error_infobooleanNoTrueフォールバックをトリガーするエラーコード(空 = 全てのエラー)
log_fallbackbooleanNoTrue出力に元のエラー情報を含める

Output:

FieldTypeDescription
resultanyフォールバックが使用されたときにログ
used_fallbackbooleanプライマリ操作またはフォールバックの結果
sourcestringフォールバックが使用されたかどうか
original_errorobject結果のソース(プライマリ/フォールバック値/フォールバック操作)

Example: Example

yaml
operation: {"module": "http.get", "params": {"url": "https://api.example.com/items"}}
fallback_value: []

Example: Example

yaml
operation: {"module": "http.get", "params": {"url": "https://api.example.com/config"}}
fallback_operation: {"module": "cache.get", "params": {"key": "config_cache"}}

Example: Example

yaml
operation: {"module": "api.call", "params": {"endpoint": "/data"}}
fallback_value: {"status": "unavailable"}
fallback_on: ["NETWORK_ERROR", "TIMEOUT_ERROR"]

リトライ

error.retry

設定可能なリトライロジックで操作をラップする

Parameters:

NameTypeRequiredDefaultDescription
operationobjectYes-リトライする操作(モジュールIDとパラメータ)
max_retriesnumberNo3リトライする操作(モジュールIDとパラメータ)
initial_delay_msnumberNo1000最大リトライ試行回数
max_delay_msnumberNo30000最初のリトライ前の初期遅延
backoff_multipliernumberNo2.0指数バックオフの乗数(例:2は各リトライの遅延を2倍に)
jitterbooleanNoTrue雷鳴の群れを防ぐために遅延にランダムジッターを追加
retry_onarrayNo[]雷鳴の群れを防ぐために遅延にランダムジッターを追加
timeout_per_attempt_msnumberNo0リトライするエラーコードのリスト(空の場合はすべてリトライ)

Output:

FieldTypeDescription
__event__string各試行のタイムアウト(0はタイムアウトなし)
resultanyルーティング用イベント(成功/終了)
attemptsnumberルーティング用イベント(成功/終了)
total_delay_msnumber成功した試行の結果
errorsarray試行回数

Example: Example

yaml
operation: {"module": "http.get", "params": {"url": "https://api.example.com/data"}}
max_retries: 3

Example: Example

yaml
operation: {"module": "database.query", "params": {"query": "SELECT * FROM users"}}
max_retries: 5
initial_delay_ms: 2000
backoff_multiplier: 2.0
jitter: true

Example: Example

yaml
operation: {"module": "api.call", "params": {"endpoint": "/submit"}}
max_retries: 3
retry_on: ["NETWORK_ERROR", "TIMEOUT_ERROR", "SERVICE_UNAVAILABLE"]

Released under the Apache 2.0 License.