代码之家  ›  专栏  ›  技术社区  ›  user3154653

Polly和包装策略

  •  0
  • user3154653  · 技术社区  · 7 年前

    我是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);
    

    稍后,我使用_策略调用外部webapi作为:

    _policy.Execute(() => SomeWebApiCallMethod<T>());
    

    我想要实现的是,如果断路器策略与超时策略相结合,则激活回退响应……在当前设置下,它在第一轮工作,即回退开始后20秒内发生5个错误……我等待30 sek,现在只需1次尝试,即超过1500毫秒,回退再次开始(?)但这还为时过早,因为断路器策略应该在20秒内进行5次尝试,然后回退开始……如果有人能为我指出解决这个问题的正确方向,我会很高兴。

    谢谢

    1 回复  |  直到 7 年前
        1
  •  0
  •   mountain traveller    7 年前

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

    我等了30瑞典克朗,现在只试了一次就超过1500毫秒,回退又开始了(?)但这还为时过早,因为断路器策略应该在回退开始之前的20秒内进行5次尝试

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

    关于

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

    断路器不 制作 尝试;他们 RetryPolicy described here .

    推荐文章