我是新的波莉,并试图创造一个断路器与后备和超时政策。我的设置如下所示,所有策略都是“全局的”,因此它们在调用之间保持状态:
_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瑞典克朗,现在只有一次尝试,那是超过1500毫秒的后撤再次启动(?)但这是为了早期,因为断路器策略应该在20秒内5次尝试,然后再回退.如果有人能指点我如何解决这个问题,我会很高兴的。
发布于 2017-07-10 22:39:52
初始答案(可在问题澄清后更新)
回复:
我等待30瑞典克朗,现在只有一次尝试,那是超过1500毫秒的后撤再次启动(?)但这还为时尚早,因为断路器策略应该在20秒内进行5次尝试,然后再回退。
断路器再一次因断断期后再次发生故障,是设计的,预期的行为。断路器没有直接向关闭状态过渡(并受定义为闭合状态的指标管理),断路器在断续期后首先进入“半开”状态,下一次单次呼叫被视为测试呼叫,以确定被叫系统的健康状况:如果单个试呼失败,则电路再次中断。这里有详细的文件。
回复:
断路器策略应在20秒内做出5次尝试。
断路器不会尝试,它们测量并允许在断路前设定故障数/比率。如果你希望你的Polly策略也能为你安排重试,那么把RetryPolicy和断路器结合起来,比如在此描述。
https://stackoverflow.com/questions/45022385
复制相似问题