Beispiel #1
0
        public void Should_add_with_GetOrAdd_with_value_when_no_existing_policy()
        {
            Policy newPolicy = Policy.NoOp();
            string key       = Guid.NewGuid().ToString();

            var returnedPolicy = _registry.GetOrAdd(key, newPolicy);

            returnedPolicy.Should().BeSameAs(newPolicy);
        }
Beispiel #2
0
        public IAsyncPolicy <HttpResponseMessage> CreateCircuitBreakerPolicy(HttpRequestMessage request)
        {
            string policyKey = $"{request.Method}-{request.RequestUri.OriginalString}-{request.Headers?.Authorization?.GetHashCode()}";

            var circuitBreakerPolicy = HttpPolicyExtensions
                                       .HandleTransientHttpError() // HttpRequestException, 5XX and 408
                                       .OrResult(response => HttpStatusCodes.WorthRetrying.Contains(response.StatusCode))
                                       .Or <Exception>()
                                       .CircuitBreakerAsync(
                handledEventsAllowedBeforeBreaking: _config.ExceptionsAllowedBeforeBreaking,
                durationOfBreak: TimeSpan.FromSeconds(_config.DurationOnBreakInSec),
                onBreak: OnBreak,
                onReset: OnReset,
                onHalfOpen: OnHalfOpen
                );

            // Separate circuit breaker policies are possible because each independent circuit must have its own policy
            var policyWithKey = _concurrentPolicyRegistry.GetOrAdd(policyKey, circuitBreakerPolicy);

            return(policyWithKey);
        }