波莉和包装策略



我是 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 毫秒的回退再次启动(?(,但这是早期的,因为断路器策略应该在 5 秒跨度内进行 20 次尝试,然后回退开始......如果有人能指出我如何解决这个问题的正确方向,我会很高兴。

初始答案(问题澄清后可能会更新(

再:

我等待 30 sek,现在只尝试 1 次超过 1500 毫秒的回退再次启动(?(,但这还为时过早,因为断路器策略应在 5 秒跨度内进行 20 次尝试,然后回退开始

断路器在中断期后由于一次进一步故障而再次断开,这是设计的行为,预期行为。 断路器不是直接转换回关闭状态(并受为关闭状态定义的指标的约束(,而是在中断期之后首先进入"半打开"状态,其中下一个单个调用被视为试用调用,以确定被调用系统的运行状况:如果单个试验调用失败,电路将再次中断。 详细文档在这里。

再:

断路器策略应在 20 秒范围内进行 5 次尝试

断路器不进行尝试;它们在断路器之前测量并允许设定的故障数量/比率。 如果希望 Polly 策略也为你协调重试,请将RetryPolicy与断路器结合使用,如此处所述。

最新更新