public static IBuildTheQueryProcessor DefaultPolicies(this IBuildTheQueryProcessor lastStageBuilder) { var builder = lastStageBuilder.ToQueryProcessorBuilder(); var defaultRetryPolicy = Policy .Handle <Exception>() .WaitAndRetry(new[] { TimeSpan.FromMilliseconds(50), TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(150) }); var circuitBreakerPolicy = Policy .Handle <Exception>() .CircuitBreaker(1, TimeSpan.FromMilliseconds(500)); var policyRegistry = new PolicyRegistry { { Constants.RetryPolicyName, defaultRetryPolicy }, { Constants.CircuitBreakerPolicyName, circuitBreakerPolicy } }; return(builder.ContextBagItem(Constants.ContextBagKey, policyRegistry)); }
/// <summary> /// Converts the last builder stage to the full builder or throws if the builder instance is not a QueryProcessorBuilder. /// This is useful for extending the builder with custom methods. /// </summary> /// <param name="lastStageBuilder">The builder instance.</param> /// <returns></returns> public static QueryProcessorBuilder ToQueryProcessorBuilder(this IBuildTheQueryProcessor lastStageBuilder) { var builder = lastStageBuilder as QueryProcessorBuilder; if (builder == null) { throw new NotSupportedException($"This extension method only supports the default {nameof(QueryProcessorBuilder)}."); } return(builder); }
public static IBuildTheQueryProcessor DefaultPolicies(this IBuildTheQueryProcessor builder) { var queryProcessorBuilder = builder as QueryProcessorBuilder; if (queryProcessorBuilder == null) { throw new NotSupportedException($"This extension method only supports the default {nameof(QueryProcessorBuilder)}."); } AddDefaultPolicies(queryProcessorBuilder); return(queryProcessorBuilder); }
public static IBuildTheQueryProcessor JsonQueryLogging(this IBuildTheQueryProcessor builder, Action <JsonSerializerSettings> configure = null) { var queryProcessorBuilder = builder as QueryProcessorBuilder; if (queryProcessorBuilder == null) { throw new NotSupportedException($"This extension method only supports the default {nameof(QueryProcessorBuilder)}."); } AddJsonQueryLogging(queryProcessorBuilder, configure); return(queryProcessorBuilder); }
public static IBuildTheQueryProcessor JsonQueryLogging(this IBuildTheQueryProcessor lastStageBuilder, Action <JsonSerializerSettings> settings = null) { var builder = lastStageBuilder.ToQueryProcessorBuilder(); JsonSerializerSettings serializerSettings = null; if (settings != null) { serializerSettings = new JsonSerializerSettings(); settings(serializerSettings); } return(builder.ContextBagItem(Constants.ContextBagKey, new NewtonsftJsonSerializer(serializerSettings))); }
public static IBuildTheQueryProcessor Policies(this IBuildTheQueryProcessor lastStageBuilder, IPolicyRegistry policyRegistry) { var builder = lastStageBuilder.ToQueryProcessorBuilder(); if (policyRegistry == null) { throw new ArgumentNullException(nameof(policyRegistry)); } if (!policyRegistry.Has(Constants.RetryPolicyName)) { throw new ConfigurationException($"The policy registry is missing the {Constants.RetryPolicyName} policy which is required"); } if (!policyRegistry.Has(Constants.CircuitBreakerPolicyName)) { throw new ConfigurationException($"The policy registry is missing the {Constants.CircuitBreakerPolicyName} policy which is required"); } return(builder.ContextBagItem(Constants.ContextBagKey, policyRegistry)); }