Ejemplo n.º 1
0
        /// <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));
        }
Ejemplo n.º 2
0
 private IBotPolicy CreatePolicy(CircuitBreakerConfiguration conf, DefaultCircuitBreakerStrategyConfiguration strConf) =>
 new BotPolicy(config => config
               .Configure(botconfig => botconfig
                          .CircuitBreaker(conf, strConf)));
Ejemplo n.º 3
0
        /// <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));
        }