Resiliência de Chamadas com Polly

Juarez Júnior - Oct 24 - - Dev Community

O Polly é uma biblioteca que ajuda a adicionar resiliência a chamadas externas em sua aplicação, oferecendo mecanismos como retry, circuit breaker, fallback, e outros padrões de resiliência. Isso é útil quando sua aplicação precisa lidar com falhas temporárias em serviços externos ou redes. Neste exemplo, vamos demonstrar como implementar uma política de retry simples usando Polly.

Bibliotecas:

Para usar a biblioteca Polly, instale o seguinte pacote NuGet no seu projeto:

Install-Package Polly
Enter fullscreen mode Exit fullscreen mode

Código de Exemplo:

using Polly;
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // Definindo uma política de retry que tenta 3 vezes com um intervalo de 2 segundos entre tentativas
        var retryPolicy = Policy
            .Handle<HttpRequestException>()
            .WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(2), 
                (exception, timeSpan, retryCount, context) =>
                {
                    Console.WriteLine($"Tentativa {retryCount} falhou. Tentando novamente em {timeSpan.TotalSeconds} segundos...");
                });

        // Fazendo uma chamada HTTP com retry
        HttpClient httpClient = new HttpClient();
        var url = "https://exemplo-api.com/falha";

        try
        {
            await retryPolicy.ExecuteAsync(async () =>
            {
                Console.WriteLine("Fazendo requisição...");
                var response = await httpClient.GetAsync(url);
                response.EnsureSuccessStatusCode();
                Console.WriteLine("Requisição bem-sucedida!");
            });
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Todas as tentativas falharam: {ex.Message}");
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação do Código:

Neste exemplo, utilizamos o Polly para definir uma política de retry que tenta três vezes, esperando dois segundos entre cada tentativa, quando ocorre uma exceção HttpRequestException. A função WaitAndRetryAsync lida com a lógica de retry e executa a chamada HTTP até que ela seja bem-sucedida ou até que o número máximo de tentativas seja atingido. Se todas as tentativas falharem, a exceção será capturada e exibida no console.

Conclusão:

O Polly é uma poderosa biblioteca para melhorar a resiliência das aplicações, fornecendo um conjunto de padrões de tratamento de falhas, como retry, circuit breaker e fallback. Isso permite que sua aplicação lide melhor com falhas temporárias de rede ou de serviços externos, aumentando a robustez e a confiabilidade.

Código fonte: GitHub

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Terabox Video Player