Skip to content

Error Handling

Retry, fallback, and circuit breaker patterns.

3 modules

ModuleDescription
Pemutus SirkuitMelindungi dari kegagalan berantai dengan pola circuit breaker
CadanganMenyediakan nilai fallback ketika operasi gagal
Coba UlangBungkus operasi dengan logika retry yang dapat dikonfigurasi

Modules

Pemutus Sirkuit

error.circuit_breaker

Melindungi dari kegagalan berantai dengan pola circuit breaker

Parameters:

NameTypeRequiredDefaultDescription
actionobjectYes-Tindakan yang dilindungi dengan circuit breaker
circuit_idstringYes-Tindakan yang dilindungi dengan circuit breaker
failure_thresholdnumberNo5Pengidentifikasi unik untuk circuit ini (untuk pelacakan status)
failure_window_msnumberNo60000Jendela waktu untuk menghitung kegagalan
recovery_timeout_msnumberNo30000Waktu sebelum mencoba pemulihan (status setengah terbuka)
success_thresholdnumberNo3Permintaan berhasil yang dibutuhkan dalam setengah terbuka untuk menutup circuit
fallbackobjectNo-Tindakan alternatif ketika circuit terbuka
fallback_valueanyNo-Tindakan alternatif ketika circuit terbuka
track_errorsarrayNo[]Nilai statis untuk dikembalikan ketika circuit terbuka

Output:

FieldTypeDescription
__event__stringHanya hitung kode kesalahan ini terhadap ambang batas (kosong = semua)
resultanyPeristiwa untuk routing (berhasil/circuit_terbuka/fallback)
circuit_statestringHasil dari tindakan atau fallback
failure_countnumberStatus saat ini dari circuit (tertutup/terbuka/setengah terbuka)
last_failure_timestringJumlah kegagalan saat ini dalam jendela
circuit_opened_atstringWaktu terakhir kegagalan

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}

Cadangan

error.fallback

Menyediakan nilai fallback ketika operasi gagal

Parameters:

NameTypeRequiredDefaultDescription
operationobjectNo-Operasi utama yang akan dicoba
fallback_valueanyNo-Operasi utama yang akan dicoba
fallback_operationobjectNo-Nilai statis untuk dikembalikan saat gagal
fallback_onarrayNo[]Operasi alternatif untuk dijalankan saat gagal
include_error_infobooleanNoTrueKode kesalahan yang memicu fallback (kosong = semua kesalahan)
log_fallbackbooleanNoTrueSertakan informasi kesalahan asli dalam output

Output:

FieldTypeDescription
resultanyLog ketika fallback digunakan
used_fallbackbooleanHasil dari operasi utama atau fallback
sourcestringApakah fallback digunakan
original_errorobjectSumber hasil (utama/nilai_fallback/operasi_fallback)

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"]

Coba Ulang

error.retry

Bungkus operasi dengan logika retry yang dapat dikonfigurasi

Parameters:

NameTypeRequiredDefaultDescription
operationobjectYes-Operasi untuk dicoba ulang (ID modul dan parameter)
max_retriesnumberNo3Operasi untuk dicoba ulang (ID modul dan parameter)
initial_delay_msnumberNo1000Jumlah maksimum percobaan ulang
max_delay_msnumberNo30000Penundaan awal sebelum percobaan ulang pertama
backoff_multipliernumberNo2.0Pengali untuk backoff eksponensial (contoh, 2 menggandakan penundaan setiap retry)
jitterbooleanNoTrueTambahkan jitter acak ke penundaan untuk mencegah serangan bersamaan
retry_onarrayNo[]Tambahkan jitter acak ke penundaan untuk mencegah serangan bersamaan
timeout_per_attempt_msnumberNo0Daftar kode kesalahan untuk dicoba ulang (kosong = coba ulang semua)

Output:

FieldTypeDescription
__event__stringBatas waktu untuk setiap percobaan (0 untuk tanpa batas waktu)
resultanyEvent untuk routing (berhasil/habis)
attemptsnumberEvent untuk routing (berhasil/habis)
total_delay_msnumberHasil dari percobaan yang berhasil
errorsarrayJumlah percobaan yang dilakukan

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.