我是 Polly 的新手,正在尝试创建一个具有回退和超时策略的断路器。我的设置如下所示,其中所有策略都是“全局”的,因此它们在调用之间保持状态:
_timeoutPolicy =
Policy.Timeout(TimeSpan.FromMilliseconds(1500),TimeoutStrategy.Pessimistic);
_circuitBreaker = Policy.Handle<Exception>()
.AdvancedCircuitBreaker(
failureThreshold:0.5,
samplingDuration: TimeSpan.FromSeconds(20),
minimumThroughput: 5,
durationOfBreak: TimeSpan.FromSeconds(30)
);
_policy = Policy<ServiceResponse<T>>
.Handle<Exception>()
.Fallback(() => new ServiceResponse<T>()
{
IsValid = false,
Message = "Tjänsten fungerar inte"
}).Wrap(_circuitBreaker).Wrap(_timeoutPolicy);
后来我使用 _policy 来调用外部 webapi:
_policy.Execute(() => SomeWebApiCallMethod<T>());
我想要实现的是如果断路器策略与超时策略相结合,则激活回退响应......使用当前设置,它在第一轮工作,即在该回退启动后 20 秒内发生 5 个错误......我等待 30 sek 和现在只有 1 次超过 1500 毫秒的后备再次启动(?),但这还为时过早,因为断路器策略应该在 20 秒跨度内进行 5 次尝试,然后回退开始......如果有人能指出我,我会很高兴在正确的方向如何解决这个问题。
谢谢!