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

弹性和瞬态故障处理库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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值