0Pricing
C# Academy · Lección

Pipelines de resiliencia

Combine estrategias en pipelines de resiliencia.

Pipelines de resiliencia es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.

Componer estrategias

La resiliencia real suele requerir que varias estrategias trabajen juntas. Polly v8 permite componerlas en un único pipeline de resiliencia mediante ResiliencePipelineBuilder.

ResiliencePipelineBuilder

Encadene llamadas a Add... y finalice con Build(). El resultado es un ResiliencePipeline reutilizable y seguro para subprocesos, a través del cual se ejecutan las llamadas.

var pipeline = new ResiliencePipelineBuilder()
    .AddRetry(new RetryStrategyOptions())
    .AddTimeout(TimeSpan.FromSeconds(5))
    .Build();

El orden es importante

Las estrategias se ejecutan de fuera hacia dentro: la primera que se añade envuelve al resto. Un orden habitual y correcto es colocar el tiempo de espera por intento dentro del reintento, con un tiempo de espera global y un disyuntor envolviéndolos.

var pipeline = new ResiliencePipelineBuilder()
    .AddTimeout(TimeSpan.FromSeconds(10))      // overall
    .AddRetry(new RetryStrategyOptions())
    .AddCircuitBreaker(new CircuitBreakerStrategyOptions())
    .AddTimeout(TimeSpan.FromSeconds(2))       // per attempt
    .Build();

Pipelines tipados

Cuando las estrategias inspeccionan el resultado (como una alternativa o un reintento basado en resultados), use el ResiliencePipelineBuilder<T> genérico para que el pipeline conozca el tipo de retorno.

var pipeline = new ResiliencePipelineBuilder<HttpResponseMessage>()
    .AddRetry(new HttpRetryStrategyOptions())
    .Build();

Ejecutar con estado

Para evitar asignaciones de cierres, pase el estado a ExecuteAsync; Polly se lo devuelve a su devolución de llamada.

await pipeline.ExecuteAsync(
    static async (state, token) => await state.CallAsync(token),
    myService);

ResiliencePipelineProvider

En lugar de construir los pipelines en línea, registre pipelines con nombre en DI y resuélvalos mediante ResiliencePipelineProvider. Esto centraliza la configuración.

builder.Services.AddResiliencePipeline("db", pipeline =>
{
    pipeline.AddRetry(new RetryStrategyOptions())
            .AddTimeout(TimeSpan.FromSeconds(3));
});

Resolver un pipeline con nombre

Inyecte ResiliencePipelineProvider<string> y obtenga su pipeline mediante la clave correspondiente allí donde lo necesite.

public class OrderService
{
    private readonly ResiliencePipeline _pipeline;
    public OrderService(ResiliencePipelineProvider<string> provider)
    {
        _pipeline = provider.GetPipeline("db");
    }
}

Resiliencia para HttpClient

La extensión AddResilienceHandler asocia un pipeline a un HttpClient tipado o con nombre y lo aplica a cada solicitud saliente.

builder.Services.AddHttpClient<CatalogClient>()
    .AddResilienceHandler("catalog", b =>
    {
        b.AddRetry(new HttpRetryStrategyOptions());
        b.AddCircuitBreaker(new HttpCircuitBreakerStrategyOptions());
    });

El controlador de resiliencia estándar

Microsoft distribuye un AddStandardResilienceHandler listo para usar que agrupa reintentos, disyuntor, tiempo de espera y limitación de tasa con valores adecuados y en el orden recomendado.

builder.Services.AddHttpClient<CatalogClient>()
    .AddStandardResilienceHandler();

Los pipelines son reutilizables y eficientes

Construya un pipeline una vez y reutilícelo para muchas ejecuciones. Son inmutables y seguros para subprocesos, por lo que compartirlos es seguro y eficiente.

Puntos de integración para la observabilidad

Cada estrategia expone devoluciones de llamada (OnRetry, OnOpened, OnTimeout, OnFallback), y Polly emite telemetría que puede integrar con el registro y las métricas para obtener una visibilidad completa.

Comprobación rápida

Pruebe los pipelines de resiliencia.

Resumen

ResiliencePipelineBuilder compone reintentos, disyuntor, tiempo de espera y alternativa en un único pipeline reutilizable; el orden es de fuera hacia dentro, por lo que importa. Use el generador genérico para estrategias que tienen en cuenta el resultado, registre pipelines con nombre mediante AddResiliencePipeline y resuélvalos mediante ResiliencePipelineProvider. Para HTTP, AddResilienceHandler o AddStandardResilienceHandler protege cada solicitud.

Preguntas frecuentes

¿La lección «Pipelines de resiliencia» es gratis?

Sí — el texto completo de «Pipelines de resiliencia» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Pipelines de resiliencia»?

Combine estrategias en pipelines de resiliencia. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Pipelines de resiliencia»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Políticas de reintento
  2. Patrón Circuit Breaker
  3. Políticas de tiempo de espera y fallback
  4. Pipelines de resiliencia
← Volver a C# Academy