public ResiliencePoliciesSettings() { OverallTimeoutPolicySettings = new OverallTimeoutPolicySettings(); TimeoutPerTryPolicySettings = new TimeoutPerTryPolicySettings(); RetrySettings = new RetryPolicySettings(); CircuitBreakerSettings = new CircuitBreakerPolicySettings(); }
private static AsyncCircuitBreakerPolicy <HttpResponseMessage> BuildCircuitBreakerPolicy( ICircuitBreakerPolicySettings settings) { return(HttpPolicyExtensions .HandleTransientHttpError() .Or <TimeoutRejectedException>() .OrResult(r => r.StatusCode == (HttpStatusCode)429) // Too Many Requests .AdvancedCircuitBreakerAsync( settings.FailureThreshold, settings.SamplingDuration, settings.MinimumThroughput, settings.DurationOfBreak, settings.OnBreak, settings.OnReset, settings.OnHalfOpen)); }
public HttpClientWrapperBuilder WithCircuitBreakerSettings(ICircuitBreakerPolicySettings circuitBreakerSettings) { _circuitBreakerSettings = circuitBreakerSettings; return(this); }
private static IHttpClientBuilder AddCircuitBreakerPolicy( this IHttpClientBuilder clientBuilder, ICircuitBreakerPolicySettings settings) { // This implementation takes into consideration situations // when you use the only HttpClient against different hosts. // In this case we want to have separate CircuitBreaker metrics for each host. // It allows us avoid situations when all requests to all hosts // will be stopped by CircuitBreaker due to single host is not available. var registry = new PolicyRegistry(); return(clientBuilder.AddPolicyHandler(message => { var policyKey = message.RequestUri.Host; var policy = registry.GetOrAdd(policyKey, BuildCircuitBreakerPolicy(settings)); return policy; })); }