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