Example #1
0
 public static PolicyRegistry GetRegistry() =>
 new PolicyRegistry()
 {
     { PolicyConstants.TIMEOUT_POLICY_NAME, SimplePolicies.GetTimeoutPolicy() },
     { PolicyConstants.RETRY_POLICY_NAME, SimplePolicies.GetRetryPolicy() },
     { PolicyConstants.CIRCUITBREAKER_POLICY_NAME, SimplePolicies.GetCircuitBreakerPolicy() },
     { PolicyConstants.COMBO_POLICY_NAME, AdvancedPolicies.GetWrappedAysncPolicy() },
     { PolicyConstants.ADVANCED_CIRCUITBREAKER_POLICY_NAME, AdvancedPolicies.GetAdvancedCircuitBreakerPolicy() }
 };
Example #2
0
        public async Task <HttpResponseMessage> ExecuteSinglePolicy(PolicyExecutionRequest request)
        {
            var executionResult = request.PolicyExecution switch
            {
                PolicyExecutionType.Timeout => await SimplePolicies.GetTimeoutPolicy()
                .ExecuteAsync(async cancellationToken =>
                              await _unPoliciedClient.CallUnreliableEndpoint(request.InnerHttpCall, cancellationToken),
                              CancellationToken.None),

                PolicyExecutionType.Retry => await SimplePolicies.GetRetryPolicy()
                .ExecuteAsync(async() => await _unPoliciedClient.CallUnreliableEndpoint(request.InnerHttpCall)),

                PolicyExecutionType.CircuitBreaker => await SimplePolicies.GetCircuitBreakerPolicy()
                .ExecuteAsync(async() => await _unPoliciedClient.CallUnreliableEndpoint(request.InnerHttpCall)),

                _ => throw new NotImplementedException()
            };

            return(executionResult);
        }
 public static IAsyncPolicy <HttpResponseMessage> GetWrappedAysncPolicy() =>
 SimplePolicies.GetRetryPolicy()
 .WrapAsync(SimplePolicies.GetCircuitBreakerPolicy())
 .WrapAsync(SimplePolicies.GetTimeoutPolicy());