Skip to content

Error Handling

Retry, fallback, and circuit breaker patterns.

3 modules

ModuleDescription
Circuito InterruttoreProtegge dai guasti a cascata con il pattern del circuito interruttore
AlternativaFornisce un valore di fallback quando l'operazione fallisce
RiprovaAvvolgere operazioni con logica di ritentativo configurabile

Modules

Circuito Interruttore

error.circuit_breaker

Protegge dai guasti a cascata con il pattern del circuito interruttore

Parameters:

NameTypeRequiredDefaultDescription
actionobjectYes-L'azione da proteggere con il circuito interruttore
circuit_idstringYes-L'azione da proteggere con il circuito interruttore
failure_thresholdnumberNo5Identificatore unico per questo circuito (per il tracciamento dello stato)
failure_window_msnumberNo60000Finestra temporale per il conteggio dei guasti
recovery_timeout_msnumberNo30000Tempo prima di tentare il recupero (stato semichiuso)
success_thresholdnumberNo3Richieste di successo necessarie in stato semichiuso per chiudere il circuito
fallbackobjectNo-Azione alternativa quando il circuito è aperto
fallback_valueanyNo-Azione alternativa quando il circuito è aperto
track_errorsarrayNo[]Valore statico da restituire quando il circuito è aperto

Output:

FieldTypeDescription
__event__stringConta solo questi codici di errore verso la soglia (vuoto = tutti)
resultanyEvento per il routing (successo/circuito_aperto/fallback)
circuit_statestringRisultato dall'azione o fallback
failure_countnumberStato attuale del circuito (chiuso/aperto/semichiuso)
last_failure_timestringConteggio attuale dei guasti nella finestra
circuit_opened_atstringTimestamp dell'ultimo guasto

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}

Alternativa

error.fallback

Fornisce un valore di fallback quando l'operazione fallisce

Parameters:

NameTypeRequiredDefaultDescription
operationobjectNo-L'operazione primaria da tentare
fallback_valueanyNo-L'operazione primaria da tentare
fallback_operationobjectNo-Valore statico da restituire in caso di fallimento
fallback_onarrayNo[]Operazione alternativa da eseguire in caso di fallimento
include_error_infobooleanNoTrueCodici di errore che attivano il fallback (vuoto = tutti gli errori)
log_fallbackbooleanNoTrueIncludere le informazioni sull'errore originale nell'output

Output:

FieldTypeDescription
resultanyRegistra quando viene utilizzato il fallback
used_fallbackbooleanRisultato dall'operazione primaria o fallback
sourcestringSe è stato utilizzato il fallback
original_errorobjectFonte del risultato (primario/valore_fallback/operazione_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"]

Riprova

error.retry

Avvolgere operazioni con logica di ritentativo configurabile

Parameters:

NameTypeRequiredDefaultDescription
operationobjectYes-L'operazione da riprovare (ID modulo e parametri)
max_retriesnumberNo3L'operazione da riprovare (ID modulo e parametri)
initial_delay_msnumberNo1000Numero massimo di tentativi di riprova
max_delay_msnumberNo30000Ritardo iniziale prima della prima riprova
backoff_multipliernumberNo2.0Moltiplicatore per backoff esponenziale (es., 2 raddoppia il ritardo ad ogni riprova)
jitterbooleanNoTrueAggiungi jitter casuale al ritardo per prevenire il thundering herd
retry_onarrayNo[]Aggiungi jitter casuale al ritardo per prevenire il thundering herd
timeout_per_attempt_msnumberNo0Elenco di codici di errore su cui riprovare (vuoto = riprova tutti)

Output:

FieldTypeDescription
__event__stringTimeout per ogni tentativo (0 per nessun timeout)
resultanyEvento per instradamento (successo/esaurito)
attemptsnumberEvento per instradamento (successo/esaurito)
total_delay_msnumberRisultato dal tentativo riuscito
errorsarrayNumero di tentativi effettuati

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.