Polly 熔断机制

配置基础在重试机制篇章已经说明,这里不再重复。

 

基本控制

Policy
    .Handle<SomeExceptionType>()  //SomeExceptionType异常触发
    .CircuitBreaker(2, TimeSpan.FromMinutes(1));  //异常触发2次,开启熔断1分钟

执行相关方法

Action<Exception, TimeSpan> onBreak = (exception, timespan) => { //熔断开启前,执行方法 };
Action onReset = () => { //熔断重置(关闭)前,执行方法 };
CircuitBreakerPolicy breaker = Policy
    .Handle<SomeExceptionType>()
    .CircuitBreaker(2, TimeSpan.FromMinutes(1), onBreak, onReset);

获取当前熔断状态

CircuitState state = breaker.CircuitState;

/*
CircuitState.Closed - 熔断关闭,允许执行动作。
CircuitState.Open - 熔断开启,执行动作被阻止。
CircuitState.HalfOpen - 自动中断持续时间到期后,从打开状态恢复。 允许执行动作。 后续动作的成功控制着向“打开”或“关闭”状态的转换。
CircuitState.Isolated - 手动开启熔断,执行动作被阻止。
*/

手动开启熔断

breaker.Isolate(); 

手动重置(关闭)熔断

breaker.Isolate(); 

高级方法

Policy
    .Handle<SomeExceptionType>()
    .AdvancedCircuitBreaker(
        failureThreshold: 0.5, // 处理器异常发生 >= 50%
        samplingDuration: TimeSpan.FromSeconds(10), // 上面处理器异常的时间段,10秒内
        minimumThroughput: 8, // 在10秒钟内至少进行了8次执行
        durationOfBreak: TimeSpan.FromSeconds(30) // 熔断30秒
                );

 

posted @ 2021-02-26 10:36  delafqm  阅读(171)  评论(0)    收藏  举报