0Pricing
C# Academy · Aula

Pipelines de resiliência

Combine estratégias em pipelines de resiliência.

Pipelines de resiliência é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

Compor Estratégias

A resiliência real geralmente precisa de várias estratégias trabalhando em conjunto. O Polly v8 permite compô-las em um único fluxo de resiliência usando o ResiliencePipelineBuilder.

O ResiliencePipelineBuilder

Você encadeia chamadas Add... e termina com Build(). O resultado é um ResiliencePipeline reutilizável e seguro para uso concorrente, por meio do qual você executa as chamadas.

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

A Ordem é Importante

As estratégias são executadas de fora para dentro: a primeira adicionada envolve as demais. Uma ordem comum e correta é colocar o tempo limite por tentativa dentro das novas tentativas, com um tempo limite geral e um disjuntor de circuito ao redor delas.

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

Fluxos Tipados

Quando as estratégias inspecionam o resultado (como uma alternativa ou uma nova tentativa baseada em resultado), use o ResiliencePipelineBuilder<T> genérico para que o fluxo conheça o tipo retornado.

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

Executar com Estado

Para evitar alocações causadas por fechamentos, passe o estado para ExecuteAsync; o Polly o devolve ao seu retorno de chamada.

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

O ResiliencePipelineProvider

Em vez de construir fluxos diretamente no código, registre fluxos nomeados na DI e obtenha-os por meio de ResiliencePipelineProvider. Isso centraliza a configuração.

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

Obter um Fluxo Nomeado

Injete ResiliencePipelineProvider<string> e busque seu fluxo pela chave sempre que precisar dele.

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

Resiliência para HttpClient

A extensão AddResilienceHandler associa um fluxo a um HttpClient tipado ou nomeado, aplicando-o a todas as requisições de saída.

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

O Manipulador de Resiliência Padrão

A Microsoft fornece o AddStandardResilienceHandler, completo e pronto para uso, que reúne novas tentativas, disjuntor de circuito, tempo limite e limitação de taxa sensatos na ordem recomendada.

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

Os Fluxos são Reutilizáveis e Econômicos

Construa um fluxo uma vez e reutilize-o em muitas execuções. Eles são imutáveis e seguros para uso concorrente, portanto compartilhá-los é seguro e eficiente.

Pontos de Integração para Observabilidade

Cada estratégia expõe retornos de chamada (OnRetry, OnOpened, OnTimeout, OnFallback), e o Polly emite telemetria que você pode integrar ao registro e às métricas para obter visibilidade completa.

Verificação Rápida

Teste os fluxos de resiliência.

Recapitulação

O ResiliencePipelineBuilder combina novas tentativas, disjuntor de circuito, tempo limite e alternativa em um único fluxo reutilizável; a ordem é de fora para dentro, portanto é importante. Use o construtor genérico para estratégias que consideram o resultado, registre fluxos nomeados com AddResiliencePipeline e obtenha-os por meio de ResiliencePipelineProvider. Para HTTP, AddResilienceHandler ou AddStandardResilienceHandler protege cada requisição.

Perguntas Frequentes

A aula “Pipelines de resiliência” é grátis?

Sim — o texto completo de “Pipelines de resiliência” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “Pipelines de resiliência”?

Combine estratégias em pipelines de resiliência. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Pipelines de resiliência”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Políticas de nova tentativa
  2. Padrão disjuntor
  3. Políticas de tempo limite e alternativa
  4. Pipelines de resiliência
← Voltar para C# Academy