.net core polly (二) 代码本质

polly代码上 本质是 各种策略 进行 串联 而且还是有顺序的串联 

例如 我要降级后重试3次进行断路

顺序

  总策略 = 降级 --->重试---->断路

然后执行 总策略 如果总策略 异常

执行 降级策略 

 

#region 
var 空策略 = Policy.NoOpAsync();
//exceptionsAllowedBeforeBreaking 允许3次重试失败 开启断路  TimeSpan.FromSeconds(2) 熔断时间 断路后2秒后 开启断路器
var 断路策略 = Policy.Handle<Exception>().CircuitBreakerAsync(exceptionsAllowedBeforeBreaking: 3, TimeSpan.FromSeconds(2),
   //打开断路器
   onBreak: (ex, ts) =>
   {
       Console.WriteLine("打开断路器");
   },
   //关闭断路器
   onReset: () =>
   {
       Console.WriteLine("关闭断路器");
   },
   //半开
   onHalfOpen: () =>
   {
       Console.WriteLine("半开断路器");
   }
    );

var 降级策略 = Policy.Handle<Exception>().FallbackAsync((token) =>
{
    Console.WriteLine("开始执行降级方法");
    return Task.CompletedTask;

});
var 重试策略 = Policy.Handle<Exception>().RetryAsync(4);
var reuslt = 空策略.WrapAsync(降级策略).WrapAsync(重试策略).WrapAsync(断路策略);
await reuslt.ExecuteAsync(() =>
{
    Console.WriteLine("正常开始业务逻辑");
    throw new Exception("错误");
});
await 降级策略.ExecuteAsync( () =>
{
    Console.WriteLine("降级方法开始");
    return Task.CompletedTask;
});

#endregion

 

posted on 2023-06-16 11:15  是水饺不是水饺  阅读(31)  评论(0)    收藏  举报

导航