Saltar al contenido principal

Resiliencia

Vali-Mediator.Resilience proporciona un pipeline de resiliencia fluido y componible sin dependencias externas.

Instalación

dotnet add package Vali-Mediator.Resilience

Orden de Ejecución

Cuando se combinan múltiples políticas, se ejecutan en este orden fijo (más externo → más interno):

loading...

Fallback siempre es el más externo — captura fallos de todas las políticas internas. Hedge es el más interno — ejecuta la operación real (potencialmente en paralelo).

Crear una Política

var policy = ResiliencePolicy.Create()
.Retry(3)
.CircuitBreaker(opts =>
{
opts.FailureThreshold = 5;
opts.BreakDuration = TimeSpan.FromSeconds(30);
})
.Timeout(TimeSpan.FromSeconds(10))
.Build();

// Ejecutar
string result = await policy.ExecuteAsync<string>(async ct =>
{
return await _httpClient.GetStringAsync(url, ct);
});

Presets de Resiliencia

Políticas preconfiguradas para escenarios comunes:

// Para llamadas a APIs externas (Retry + CircuitBreaker + Timeout)
var policy = ResiliencePresets.ForExternalApi();

// Para operaciones de base de datos
var policy = ResiliencePresets.ForDatabase();

// Para operaciones críticas (Retry + CircuitBreaker + Fallback)
var policy = ResiliencePresets.ForCritical(fallbackValue: "default");

// Sin resiliencia (passthrough)
var policy = ResiliencePresets.NoResilience();

Políticas Disponibles

PolíticaMétodoPropósito
Retry.Retry(n)Reintentar en fallos transitorios
Circuit Breaker.CircuitBreaker(opts)Detener llamadas cuando la tasa de error es alta
Timeout.Timeout(ts)Cancelar operaciones lentas
Bulkhead.Bulkhead(n, q)Limitar solicitudes concurrentes
Hedge.Hedge(delay)Solicitudes especulativas paralelas
Rate Limiter.RateLimiter(cap)Limitar tasa de solicitudes
Chaos.Chaos(rate)Inyectar fallos para pruebas
Fallback.Fallback<T>(opts)Retornar valor por defecto cuando todo falla