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
- Políticas de nova tentativa
- Padrão disjuntor
- Políticas de tempo limite e alternativa
- Pipelines de resiliência