/// <summary> /// Adds a circuit breaker bot to a <see cref="IBotPolicy"/> with the given configuration. /// </summary> /// <param name="builder">The policy builder.</param> /// <param name="configuratorAction">The bots configurator action.</param> /// <param name="strategyConfiguration">The circuit breakers configurator action.</param> /// <returns>The policy builder.</returns> /// <example> /// <code> /// builder.CircuitBreaker(config => config /// .BrakeWhenExceptionOccurs(exception => exception is HttpRequestException) /// .OnClosed(() => onClosedAction()) /// .OnHalfOpen(() => onHalfOpenAction()) /// .OnOpen(openDuration => onOpenAction(openDuration)), /// strategyConfig => strategyConfig /// .DurationOfOpen(TimeSpan.FromSeconds(15)) /// .FailureThresholdBeforeOpen(5) /// .SuccessThresholdInHalfOpen(2)); /// </code> /// </example> public static IBotPolicyBuilder CircuitBreaker(this IBotPolicyBuilder builder, Action <CircuitBreakerConfiguration> configuratorAction, Action <DefaultCircuitBreakerStrategyConfiguration> strategyConfiguration) { Shield.EnsureNotNull(configuratorAction, nameof(configuratorAction)); Shield.EnsureNotNull(strategyConfiguration, nameof(strategyConfiguration)); var strategyConfig = new DefaultCircuitBreakerStrategyConfiguration(); strategyConfiguration?.Invoke(strategyConfig); return(builder.AddBot((innerBot, config) => new CircuitBreakerBot(innerBot, config, new DefaultCircuitBreakerStrategy(config, strategyConfig)), configuratorAction)); }
private IBotPolicy CreatePolicy(CircuitBreakerConfiguration conf, DefaultCircuitBreakerStrategyConfiguration strConf) => new BotPolicy(config => config .Configure(botconfig => botconfig .CircuitBreaker(conf, strConf)));
/// <summary> /// Adds a circuit breaker bot to a <see cref="IBotPolicy"/> with the given configuration. /// </summary> /// <param name="builder">The policy builder.</param> /// <param name="configuration">The bots configuraton.</param> /// <param name="strategyConfiguration">The circuit breakers configuraton.</param> /// <returns>The policy builder.</returns> /// <example> /// <code> /// builder.CircuitBreaker(new CircuitBreakerConfiguration() /// .BrakeWhenExceptionOccurs(exception => exception is HttpRequestException) /// .OnClosed(() => onClosedAction()) /// .OnHalfOpen(() => onHalfOpenAction()) /// .OnOpen(openDuration => onOpenAction(openDuration)), /// new DefaultCircuitBreakerStrategyConfiguration() /// .DurationOfOpen(TimeSpan.FromSeconds(15)) /// .FailureThresholdBeforeOpen(5) /// .SuccessThresholdInHalfOpen(2)); /// </code> /// </example> public static IBotPolicyBuilder CircuitBreaker(this IBotPolicyBuilder builder, CircuitBreakerConfiguration configuration, DefaultCircuitBreakerStrategyConfiguration strategyConfiguration) { Shield.EnsureNotNull(configuration, nameof(configuration)); Shield.EnsureNotNull(strategyConfiguration, nameof(strategyConfiguration)); return(builder.AddBot((innerBot, config) => new CircuitBreakerBot(innerBot, config, new DefaultCircuitBreakerStrategy(config, strategyConfiguration)), configuration)); }