.NET 6 + Polly: exemplos com Retry, Circuit Breaker, Chaos Engineering…
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
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: