.NET 6 + Polly: exemplos com Retry, Circuit Breaker, Chaos Engineering…

Renato Groffe
2 min readMar 14, 2022

--

Venho abordando o uso da biblioteca Polly há algum tempo, principalmente por considerá-la uma excelente opção no tratamento de falhas em aplicações .NET. A forma como configuramos as Policies disponíveis (construções estas concebidas para tratar situações de erro) contribui para a obtenção de um código mais enxuto, além de simplificar a implementação de patterns mais sofisticados como Circuit Breaker.

A seguir estão alguns artigos que publiquei durante 2021 sobre Polly, com diversos exemplos de implementações de patterns de resiliência (Wait-Retry, Fallback, além do já mencionado Circuit Breaker):

.NET 5 + Polly: exemplos com Circuit Breaker, Chaos Engineering, Fallback, Wait-Retry…

Tratamento de Falhas com .NET + Polly: implementando o padrão Circuit Breaker

Ao implementar projetos em .NET 6 que utilizem Polly teremos agora algumas diferenças (pequenas, mas ainda assim presentes), principalmente considerando o tratamento de falhas geradas em classes que façam uso do tipo HttpClient no envio de requisições HTTP.

Tomando por exemplo o tipo APIContagemClient, cuja definição apresentada na listagem a seguir traz o método ObterDadosContagem enviando solicitações HTTP a uma API REST de contagem de acessos:

Assim como em versões anteriores, fiz uso da extensão para integração com o Polly em Web Apps e que foi disponibilizada pela própria Microsoft através do package Microsoft.Extensions.Http.Polly:

Ao invés de invocar o método AddHttpClient e na sequência AddPolicyHandler (incluindo a Policy com o design pattern de tratamento de falhas) na classe Startup, fiz este ajuste agora em Program.cs. É o que demonstra a listagem a seguir:

Neste projeto de testes utilizei o padrão Retry, com a classe estática RetryExtensions gerando a Policy correspondente devidamente configurada:

Esta aplicação já está inclusive no meu GitHub:

.NET 6 + ASP.NET Core + Razor Pages + Consumo de API REST + Código Resiliente com Polly

Disponibilizei também outros exemplos como repositórios gratuitos:

.NET 6 + Consumo de API REST de contagem de acessos + Código Resiliente com Polly + Circuit Breaker

.NET 6 + Consumo de API REST de contagem de acessos + Código Resiliente com Polly + Fallback + Simulação de caos com Simmy

.NET 6 + Azure Functions + Isolated Process + Timer Trigger + HttpClient + Uso de policy de Retry com Polly + Consumo de API REST de contagem

Demonstrei em detalhes os exemplos com os padrões Retry (em um site ASP.NET Core utilizando Razor Pages), Circuit Breaker e empregando Fallback + simulação de caos com Simmy em uma live recente do canal DevelopersBr:

Já o exemplo com Azure Functions foi apresentado em detalhes em uma live do canal do Microsoft Reactor:

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

No responses yet