Exemplo n.º 1
0
        public void ConfigureServices(IServiceCollection 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
                );

            var retryPolicy = Policy
                              .HandleResult <HttpResponseMessage>(r => !r.IsSuccessStatusCode)
                              .RetryAsync(2, onRetry: (message, retryCount) =>
            {
                string msg = $"Retentativa: {retryCount}";
                Console.Out.WriteLineAsync(msg);
                LogFileHelper.WriteMessage(msg);
            });

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

            services.AddHttpClient <APIContagemClient>()
            .AddPolicyHandler(policyWrap);

            services.AddRazorPages();
        }
Exemplo n.º 2
0
        public void ConfigureServices(IServiceCollection services)
        {
            var retryPolicy = Policy
                              .HandleResult <HttpResponseMessage>(r => !r.IsSuccessStatusCode)
                              .RetryAsync(2, onRetry: (message, retryCount) =>
            {
                string msg = $"Retentativa: {retryCount}";
                Console.Out.WriteLineAsync(msg);
                LogFileHelper.WriteMessage(msg);
            });

            services.AddHttpClient <APIContagemClient>()
            .AddPolicyHandler(retryPolicy);
            services.AddRazorPages();
        }
        public void ConfigureServices(IServiceCollection services)
        {
            // Repositório que contém a API REST consumida por este projeto:
            // https://github.com/renatogroffe/ASPNETCore5-REST_API-JSONConsoleLogger_APIContagem

            // Geração de uma mensagem simulado erro HTTP do tipo 500
            // (Internal Server Error)
            var resultInternalServerError = new HttpResponseMessage(
                HttpStatusCode.InternalServerError)
            {
                Content = new StringContent(
                    "Erro gerado em simulação de caos com Simmy...")
            };

            // Criação da Chaos Policy com uma probabilidade
            // de 60% de erro
            var chaosPolicy = MonkeyPolicy
                              .InjectResultAsync <HttpResponseMessage>(with =>
                                                                       with.Result(resultInternalServerError)
                                                                       .InjectionRate(0.6)
                                                                       .Enabled(true)
                                                                       );

            // Configuração da Policy para Retry
            var retryPolicy = Policy
                              .HandleResult <HttpResponseMessage>(r => !r.IsSuccessStatusCode)
                              .RetryAsync(3, onRetry: (message, retryCount) =>
            {
                Console.Out.WriteLine($"Content: {message.Result.Content.ReadAsStringAsync().Result}");
                Console.Out.WriteLine($"ReasonPhrase: {message.Result.ReasonPhrase}");
                string msg = $"Retentativa: {retryCount}";
                Console.Out.WriteLineAsync(msg);
                LogFileHelper.WriteMessage(msg);
            });

            // Criação de um PolicyWrap agrupando as 2 Policies
            var policyWrap = Policy.WrapAsync(retryPolicy, chaosPolicy);

            services.AddHttpClient <APIContagemClient>()
            .AddPolicyHandler(policyWrap);

            services.AddRazorPages();
        }