Merge branch 'release/13.4.0'

This commit is contained in:
Thiago Loureiro de Azevedo 2019-03-23 22:21:41 +01:00
commit 6baba2c6c0
3 changed files with 41 additions and 28 deletions

View File

@ -1,3 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using Polly;
using Polly.CircuitBreaker; using Polly.CircuitBreaker;
using Polly.Timeout; using Polly.Timeout;
@ -5,13 +8,16 @@ namespace Ocelot.Provider.Polly
{ {
public class CircuitBreaker public class CircuitBreaker
{ {
public CircuitBreaker(CircuitBreakerPolicy circuitBreakerPolicy, TimeoutPolicy timeoutPolicy) private readonly List<IAsyncPolicy> _policies = new List<IAsyncPolicy>();
public CircuitBreaker(params IAsyncPolicy[] policies)
{ {
CircuitBreakerPolicy = circuitBreakerPolicy; foreach (var policy in policies.Where(p => p != null))
TimeoutPolicy = timeoutPolicy; {
this._policies.Add(policy);
}
} }
public CircuitBreakerPolicy CircuitBreakerPolicy { get; private set; } public IAsyncPolicy[] Policies => this._policies.ToArray();
public TimeoutPolicy TimeoutPolicy { get; private set; }
} }
} }

View File

@ -25,7 +25,7 @@ namespace Ocelot.Provider.Polly
try try
{ {
return await Policy return await Policy
.WrapAsync(_qoSProvider.CircuitBreaker.CircuitBreakerPolicy, _qoSProvider.CircuitBreaker.TimeoutPolicy) .WrapAsync(_qoSProvider.CircuitBreaker.Policies)
.ExecuteAsync(() => base.SendAsync(request,cancellationToken)); .ExecuteAsync(() => base.SendAsync(request,cancellationToken));
} }
catch (BrokenCircuitException ex) catch (BrokenCircuitException ex)

View File

@ -22,6 +22,8 @@ namespace Ocelot.Provider.Polly
_timeoutPolicy = Policy.TimeoutAsync(TimeSpan.FromMilliseconds(reRoute.QosOptions.TimeoutValue), strategy); _timeoutPolicy = Policy.TimeoutAsync(TimeSpan.FromMilliseconds(reRoute.QosOptions.TimeoutValue), strategy);
if (reRoute.QosOptions.ExceptionsAllowedBeforeBreaking > 0)
{
_circuitBreakerPolicy = Policy _circuitBreakerPolicy = Policy
.Handle<HttpRequestException>() .Handle<HttpRequestException>()
.Or<TimeoutRejectedException>() .Or<TimeoutRejectedException>()
@ -43,6 +45,11 @@ namespace Ocelot.Provider.Polly
_logger.LogDebug(".Breaker logging: Half-open; next call is a trial."); _logger.LogDebug(".Breaker logging: Half-open; next call is a trial.");
} }
); );
}
else
{
_circuitBreakerPolicy = null;
}
CircuitBreaker = new CircuitBreaker(_circuitBreakerPolicy, _timeoutPolicy); CircuitBreaker = new CircuitBreaker(_circuitBreakerPolicy, _timeoutPolicy);
} }