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));
 }
Esempio n. 3
0
 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;
            }));
        }