Skip to content

Error Handling

Retry, fallback, and circuit breaker patterns.

3 modules

ModuleDescription
Interruptor de CircuitoProtege contra fallas en cascada con el patrón de interruptor de circuito
AlternativaProporciona un valor alternativo cuando la operación falla
ReintentarEnvuelve operaciones con lógica de reintento configurable

Modules

Interruptor de Circuito

error.circuit_breaker

Protege contra fallas en cascada con el patrón de interruptor de circuito

Parameters:

NameTypeRequiredDefaultDescription
actionobjectYes-La acción a proteger con el interruptor de circuito
circuit_idstringYes-La acción a proteger con el interruptor de circuito
failure_thresholdnumberNo5Identificador único para este circuito (para seguimiento de estado)
failure_window_msnumberNo60000Ventana de tiempo para contar fallas
recovery_timeout_msnumberNo30000Tiempo antes de intentar recuperación (estado medio abierto)
success_thresholdnumberNo3Solicitudes exitosas necesarias en medio abierto para cerrar el circuito
fallbackobjectNo-Acción alternativa cuando el circuito está abierto
fallback_valueanyNo-Acción alternativa cuando el circuito está abierto
track_errorsarrayNo[]Valor estático a devolver cuando el circuito está abierto

Output:

FieldTypeDescription
__event__stringSolo cuenta estos códigos de error hacia el umbral (vacío = todos)
resultanyEvento para enrutamiento (éxito/circuito_abierto/alternativa)
circuit_statestringResultado de la acción o alternativa
failure_countnumberEstado actual del circuito (cerrado/abierto/medio abierto)
last_failure_timestringConteo actual de fallas en la ventana
circuit_opened_atstringMarca de tiempo de la última falla

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

Proporciona un valor alternativo cuando la operación falla

Parameters:

NameTypeRequiredDefaultDescription
operationobjectNo-La operación primaria a intentar
fallback_valueanyNo-La operación primaria a intentar
fallback_operationobjectNo-Valor estático a devolver en caso de falla
fallback_onarrayNo[]Operación alternativa a ejecutar en caso de falla
include_error_infobooleanNoTrueCódigos de error que activan la alternativa (vacío = todos los errores)
log_fallbackbooleanNoTrueIncluir información del error original en la salida

Output:

FieldTypeDescription
resultanyRegistro cuando se usa la alternativa
used_fallbackbooleanResultado de la operación primaria o alternativa
sourcestringSi se usó la alternativa
original_errorobjectFuente del resultado (primario/valor_alternativo/operación_alternativa)

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

Reintentar

error.retry

Envuelve operaciones con lógica de reintento configurable

Parameters:

NameTypeRequiredDefaultDescription
operationobjectYes-La operación a reintentar (ID del módulo y parámetros)
max_retriesnumberNo3La operación a reintentar (ID del módulo y parámetros)
initial_delay_msnumberNo1000Número máximo de intentos de reintento
max_delay_msnumberNo30000Retraso inicial antes del primer reintento
backoff_multipliernumberNo2.0Multiplicador para retroceso exponencial (ej., 2 duplica el retraso en cada reintento)
jitterbooleanNoTrueAñadir variación aleatoria al retraso para prevenir sobrecarga
retry_onarrayNo[]Añadir variación aleatoria al retraso para prevenir sobrecarga
timeout_per_attempt_msnumberNo0Lista de códigos de error para reintentar (vacío = reintentar todos)

Output:

FieldTypeDescription
__event__stringTiempo de espera para cada intento (0 para sin límite)
resultanyEvento para enrutamiento (éxito/exhausto)
attemptsnumberEvento para enrutamiento (éxito/exhausto)
total_delay_msnumberResultado del intento exitoso
errorsarrayNúmero de intentos realizados

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.