protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                try
                {
                    _client.EnviarRequisicao();
                }
                catch
                {
                    string mensagem = "Esgotadas as tentativas com Polly...";
                    _logger.LogError(mensagem);
                    LogFileHelper.WriteMessage(mensagem);
                }

                await Task.Delay(4000, stoppingToken);
            }
        }
示例#2
0
        public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureServices((hostContext, services) =>
        {
            // Geração de uma mensagem simulado erro HTTP do tipo 503
            var faultMessage = new HttpResponseMessage(
                HttpStatusCode.ServiceUnavailable)
            {
                Content = new StringContent(
                    "Erro HTTP 503: Simulação de serviço indisponível com Simmy...")
            };

            // Configuração de uma falha a ser simulada via Simmy
            var faultPolicy = MonkeyPolicy.InjectFaultAsync(
                faultMessage,
                injectionRate: 0.6,
                enabled: () => true
                );

            // Configuração da Policy para Retry
            var retryPolicy = Policy
                              .HandleResult <HttpResponseMessage>(
                r => r.StatusCode == HttpStatusCode.ServiceUnavailable)
                              .RetryAsync(3, onRetry: (message, retryCount) =>
            {
                string msg = $"Retentativa: {retryCount}";

                Console.BackgroundColor = ConsoleColor.Black;
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Out.WriteLineAsync(msg);
                LogFileHelper.WriteMessage(msg);
            });

            var policyWrap = Policy.WrapAsync(retryPolicy, faultPolicy);

            services.AddHttpClient <APIContagemClient>()
            .AddPolicyHandler(policyWrap);
            services.AddHostedService <Worker>();
        });