public Policy GetPolicyAsync(PolicyBuilder policyBuilder)
 {
     return(policyBuilder.CircuitBreakerAsync(_exceptionsAllowedBeforeBreaking, TimeSpan.FromMilliseconds(_durationOfBreakInMilliseconds),
                                              onBreak: (x, y) => _logger.LogException(new Exception("Breaker logging: Breaking the circuit for " + y.TotalMilliseconds + " ms!", x)),
                                              onReset: () => _logger.LogMessage("Breaker logging: Call ok! Closed the circuit again!"),
                                              onHalfOpen: () => _logger.LogMessage("Breaker logging: Half-open: Next call is a trial!")));
 }
Beispiel #2
0
        protected virtual AsyncCircuitBreakerPolicy GetCircuitBreakerPolicy()
        {
            PolicyBuilder builder = Policy.Handle <Exception>(ShouldHandleException);
            int           exceptionsAllowedBeforeBreaking = Settings.CircuitBreakerExceptionsAllowedBeforeBreaking;
            TimeSpan      durationOfBreak = TimeSpan.FromMinutes(Settings.CircuitBreakerDurationOfBreakInMinutes);

            return(builder.CircuitBreakerAsync(exceptionsAllowedBeforeBreaking, durationOfBreak, OnCircuitBreakerBreak, OnCircuitBreakerReset));
        }
Beispiel #3
0
 public static AsyncPolicy <T> AlteredRetryPolicy <T>(this PolicyBuilder <T> p, string name) where T : IAlteredResponse
 => Policy.WrapAsync(
     p.WaitAndRetryAsync(
         DecorrelatedJitter(MaxRetries, MinDelay, MaxDelay),
         (response, timeSpan, numRetries, context) =>
 {
     AlteredLog.Warning(new
     {
         Name = name,
         response.Result.RequestId,
         Response = new
         {
             StatusCode = (int)RetryStatusCode,
             response.Result.RequestDuration,
             RetryAfter = timeSpan.TotalMilliseconds,
             NumRetries = numRetries,
             Context    = context.ToDictionary()
                          // response.Exception? already logged
         }
     });
 }),
     p.CircuitBreakerAsync(MaxCircuitFails, CircuitBreakDuration,
                           (response, state, timeSpan, context) =>
 {
     AlteredLog.Error(new
     {
         Name = name,
         response.Result.RequestId,
         Response = new
         {
             StatusCode = (int)CircuitBreakStatusCode,
             response.Result.RequestDuration,
             RetryAfter   = timeSpan.TotalMilliseconds,
             CircuitState = state,
             Context      = context.ToDictionary()
         }
     });
 },
                           (context) =>
 {
     AlteredLog.Error(new
     {
         Name     = name,
         Response = new
         {
             StatusCode = (int)CircuitResetStatusCode,
             Context    = context.ToDictionary()
         }
     });
 },
                           () =>
 {
     // half-open
 }));
Beispiel #4
0
 public Policy Build()
 {
     _circuitBreakerPolicyAsync = _policyBuilder.CircuitBreakerAsync(_exceptionsAllowedBeforeBreaking,
                                                                     _durationOfBreak,
                                                                     (ex, breakDelay) =>
     {
         _log.Error("发生异常:", ex);
     },
                                                                     () =>
     {
         _log.Debug("正在重新启动任务");
     });
     _circuitBreakerPolicy = _policyBuilder.CircuitBreaker(_exceptionsAllowedBeforeBreaking,
                                                           _durationOfBreak,
                                                           (ex, breakDelay) =>
     {
         _log.Error("发生异常:", ex);
     },
                                                           () =>
     {
         _log.Debug("正在重新启动任务");
     });
     return(_circuitBreakerPolicyAsync);
 }
 public PolicyProvider()
 {
     IdPSearchServiceRetryPolicy = _idPSearchServicePolicyBuilder.RetryAsync(3);
     IdPSearchServiceErrorPolicy = _idPSearchServicePolicyBuilder.CircuitBreakerAsync(3, TimeSpan.FromMinutes(5));
     IdPSearchServicePolicy      = IdPSearchServiceRetryPolicy.WrapAsync(IdPSearchServiceErrorPolicy);
 }
Beispiel #6
0
 private static Polly.CircuitBreaker.AsyncCircuitBreakerPolicy <HttpResponseMessage> CircuitBreakerPolicy(
     PolicyBuilder <HttpResponseMessage> builder, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak)
 => builder.CircuitBreakerAsync(handledEventsAllowedBeforeBreaking, durationOfBreak);
 public AsyncPolicy CreatePolicyAsync(PolicyBuilder policyBuilder) =>
 policyBuilder.CircuitBreakerAsync(_exceptionsAllowedBeforeBreaking, _durationOfBreak);