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(); }
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(); }