【问题标题】:Polly and wrapped policiesPolly 和包装策略
【发布时间】:2017-07-11 06:39:52
【问题描述】:

我是 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 次尝试...如果有人我会很高兴可以指出正确的方向如何解决这个问题。

谢谢!

【问题讨论】:

  • 您能否更准确地说明您正在寻求实现的行为,当您声明:“如果断路器策略与超时策略相结合时”激活后备响应?

标签: circuit-breaker polly


【解决方案1】:

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

回复:

我等待了 30 秒,现在只有 1 次超过 1500 毫秒的回退再次启动(?)但这为时过早,因为断路器策略应该在回退开始之前的 20 秒内进行 5 次尝试

断路器在断路期后由于单一的进一步故障而再次分断,这是设计的预期行为。断路器不是直接转换回关闭状态(并受为关闭状态定义的指标控制),而是在中断期之后,首先进入“半开”状态,其中下一次调用被视为试调用以确定被调用系统的健康状况:如果单个试调用失败,则电路再次中断。 Detailed documentation here.

回复:

断路器策略应在 20 秒内尝试 5 次

断路器不会进行尝试;他们测量并允许在破坏之前设定的失败次数/比率。如果您希望 Polly 策略也为您安排重试,请将 RetryPolicy 与断路器组合为 described here。

【讨论】:

  • 感谢您的精彩解释。我了解 CB 根据历史/当前数据评估其状态,但可以说您有一个不稳定的“遗留”系统,由于某种原因会为某个用户抛出异常。有没有办法在时间跨度 x 期间使用 CB 的设置/评估关于失败请求的百分比,即使是“半打开状态”,所以这个决定不是基于 1 个请求,而是基于评估的状态?
  • 与 Hystrix 一样,Polly 用于确定如何退出 HalfOpen 状态的唯一指标(在本问题提出时)是单个试用调用。但是,在 Polly 上打开了一个功能请求,用于以更精确的指标退出 HalfOpen 状态,我的 cmets 在这里实现:github.com/App-vNext/Polly/issues/239#issuecomment-292710948。如果您愿意,可以 +1 / 添加对该 github 问题的评论,以表明您对该功能感兴趣。
猜你喜欢
  • 2018-02-05
  • 2020-10-29
  • 1970-01-01
  • 2022-10-02
  • 2022-10-02
  • 1970-01-01
  • 2017-11-22
  • 2022-10-19
  • 2019-05-05
相关资源
最近更新 更多