弹性和瞬态故障处理库Polly之重试策略

来源:互联网 发布:中国电信云计算基地 编辑:程序博客网 时间:2024/05/22 00:50

弹性和瞬态故障处理库Polly

源码及参考见文章底部

Nuget中Polly库的引用:

Install-Package Polly

以下策略调用的方法:
详细代码见

public static int random = 10;public static int DivideByZero(int random){    //int a = 0;    if (random != 25) random = 0;    return 100 / random;}

Retry策略

public static void Retry(){    var retry = Policy        .Handle<DivideByZeroException>()        .Retry(3, (exception, retryCount) =>        {            Console.WriteLine($"执行异常,重试次数:{retryCount},【异常来自:{exception.GetType().Name}】.");        });    retry.Execute(() => { DivideByZero(random); });}

结果:
这里写图片描述

WaitAndRetry策略

public static void WaitAndRetry(){    var retry = Policy        .Handle<DivideByZeroException>()        .WaitAndRetry(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(1, retryAttempt)),        (exception, timespan, retryCount, context) =>        {            Console.WriteLine($"重试,[当前随机数为{random}] [retrycount{retryCount}] [异常来自:{exception.GetType().Name}] [{timespan}]");            random = new Random().Next(10, 50);            if (random == 25)                Console.WriteLine($"成功,随机数为{random}");        });    retry.Execute(() => DivideByZero(random));}

结果:

这里写图片描述

WaitandRetryForeverUntilSuccess策略

public static void WaitandRetryForeverUntilSuccess(){    var retryForever = Policy                .Handle<DivideByZeroException>()                .WaitAndRetryForever(retryAttempt => TimeSpan.FromSeconds(Math.Pow(1, retryAttempt)), (exception, timespan) =>                {                    Console.WriteLine($"重试,[当前随机数为{random}][异常来自:{exception.GetType().Name}] [{timespan}]");                    random = new Random().Next(10, 50);                    if (random == 25)                        Console.WriteLine($"成功,随机数为{random}");                });    retryForever.Execute(() => { DivideByZero(random); });}

结果:
这里写图片描述

参考:Github-Polly以及Jeffcky的博客

源码: Github

阅读全文
1 0
原创粉丝点击