Skip to content

Error Handling

Retry, fallback, and circuit breaker patterns.

3 modules

ModuleDescription
DisjoncteurProtégez contre les défaillances en cascade avec le modèle de disjoncteur
SecoursFournir une valeur de secours lorsque l'opération échoue
RéessayerEnveloppez les opérations avec une logique de réessai configurable

Modules

Disjoncteur

error.circuit_breaker

Protégez contre les défaillances en cascade avec le modèle de disjoncteur

Parameters:

NameTypeRequiredDefaultDescription
actionobjectYes-L'action à protéger avec le disjoncteur
circuit_idstringYes-L'action à protéger avec le disjoncteur
failure_thresholdnumberNo5Identifiant unique pour ce circuit (pour le suivi de l'état)
failure_window_msnumberNo60000Fenêtre temporelle pour compter les défaillances
recovery_timeout_msnumberNo30000Temps avant de tenter une récupération (état mi-ouvert)
success_thresholdnumberNo3Requêtes réussies nécessaires en mi-ouvert pour fermer le circuit
fallbackobjectNo-Action alternative lorsque le circuit est ouvert
fallback_valueanyNo-Action alternative lorsque le circuit est ouvert
track_errorsarrayNo[]Valeur statique à retourner lorsque le circuit est ouvert

Output:

FieldTypeDescription
__event__stringNe compter que ces codes d'erreur pour le seuil (vide = tous)
resultanyÉvénement pour le routage (succès/circuit_ouvert/solution_de_secours)
circuit_statestringRésultat de l'action ou de la solution de secours
failure_countnumberÉtat actuel du circuit (fermé/ouvert/mi-ouvert)
last_failure_timestringNombre actuel de défaillances dans la fenêtre
circuit_opened_atstringHorodatage de la dernière défaillance

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}

Secours

error.fallback

Fournir une valeur de secours lorsque l'opération échoue

Parameters:

NameTypeRequiredDefaultDescription
operationobjectNo-L'opération principale à tenter
fallback_valueanyNo-L'opération principale à tenter
fallback_operationobjectNo-Valeur statique à retourner en cas d'échec
fallback_onarrayNo[]Opération alternative à exécuter en cas d'échec
include_error_infobooleanNoTrueCodes d'erreur qui déclenchent le secours (vide = toutes les erreurs)
log_fallbackbooleanNoTrueInclure les informations d'erreur d'origine dans la sortie

Output:

FieldTypeDescription
resultanyJournal lorsque le secours est utilisé
used_fallbackbooleanRésultat de l'opération principale ou de secours
sourcestringSi le secours a été utilisé
original_errorobjectSource du résultat (principal/valeur_de_secours/opération_de_secours)

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

Réessayer

error.retry

Enveloppez les opérations avec une logique de réessai configurable

Parameters:

NameTypeRequiredDefaultDescription
operationobjectYes-L'opération à réessayer (ID du module et paramètres)
max_retriesnumberNo3L'opération à réessayer (ID du module et paramètres)
initial_delay_msnumberNo1000Nombre maximum de tentatives de réessai
max_delay_msnumberNo30000Délai initial avant le premier réessai
backoff_multipliernumberNo2.0Multiplicateur pour le backoff exponentiel (par exemple, 2 double le délai à chaque réessai)
jitterbooleanNoTrueAjoutez un jitter aléatoire au délai pour éviter l'effet de troupeau
retry_onarrayNo[]Ajoutez un jitter aléatoire au délai pour éviter l'effet de troupeau
timeout_per_attempt_msnumberNo0Liste des codes d'erreur à réessayer (vide = réessayer tous)

Output:

FieldTypeDescription
__event__stringDélai d'attente pour chaque tentative (0 pour pas de délai)
resultanyÉvénement pour le routage (succès/épuisé)
attemptsnumberÉvénement pour le routage (succès/épuisé)
total_delay_msnumberRésultat de la tentative réussie
errorsarrayNombre de tentatives effectuées

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.