guava-retry使用笔记

guava-retry使用笔记

xml依赖

xml 复制代码
<dependency>
            <groupId>com.github.rholder</groupId>
            <artifactId>guava-retrying</artifactId>
            <version>2.0.0</version>    
        </dependency>

使用案例

重试3次,每次间隔3秒

java 复制代码
 /**
     * 重试3次,每次间隔3秒
     */
    @Test
    void testGuavaRetry(){
        //定义请求实现
        Callable<Boolean> callable = ()->{
            //do something...
            log.info("call task... ...");
            throw new RuntimeException();
        };

        //定义重试机制
        Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
                //重试条件
                .retryIfResult(Objects::isNull)
                //异常重试源
                .retryIfExceptionOfType(IOException.class)
                .retryIfRuntimeException()
                .retryIfResult(res->res=false)
                //等待间隔时间
                .withWaitStrategy(WaitStrategies.fixedWait(3, TimeUnit.SECONDS))
                //设置最大重试次数
                .withStopStrategy(StopStrategies.stopAfterAttempt(3))
                .build();

        try {
            retryer.call(callable);
        }catch (RetryException | ExecutionException e){
            e.printStackTrace();
        }
    }

以指数递增的间隔等待重试

java 复制代码
 @Test
    void testGuavaRetry2(){
        Callable<Boolean> callable = ()->{
            //do something...
            log.info("call task... ...");
            throw new RuntimeException();
        };
        Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
                .retryIfExceptionOfType(IOException.class)
                .retryIfRuntimeException()
                //以指数递增的间隔等待,直到最多5分钟,5分钟后,每隔5分钟重试1次
                .withWaitStrategy(WaitStrategies
                        .exponentialWait(100,5,TimeUnit.MINUTES))
                //设置永远重试
                .withStopStrategy(StopStrategies.neverStop())
                .build();
        try {
            retryer.call(callable);
        }catch (RetryException | ExecutionException e){
            e.printStackTrace();
        }
    }

失败后重试,按斐波那契回退间隔重试

java 复制代码
 @Test
    void testGuavaRetry3(){
        Callable<Boolean> callable = ()->{
            //do something...
            log.info("call task... ...");
            throw new RuntimeException();
        };
        Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
                .retryIfExceptionOfType(IOException.class)
                .retryIfRuntimeException()
                //失败后重试,按斐波那契回退间隔,直到2分钟,2分钟后,每隔2分钟重试1次
                .withWaitStrategy(WaitStrategies
                        .fibonacciWait(100,2,TimeUnit.MINUTES))
                //设置永远重试
                .withStopStrategy(StopStrategies.neverStop())
                .build();
        try {
            retryer.call(callable);
        }catch (RetryException | ExecutionException e){
            e.printStackTrace();
        }


    }
相关推荐
##echo5 分钟前
嵌入式Linux裸机开发笔记9(IMX6ULL)GPIO 中断实验(1)
linux·c语言·笔记·单片机·嵌入式硬件
我爱学嵌入式3 小时前
C语言第 9 天学习笔记:数组(二维数组与字符数组)
c语言·笔记·学习
_Kayo_10 小时前
VUE2 学习笔记6 vue数据监测原理
vue.js·笔记·学习
使二颗心免于哀伤13 小时前
《设计模式之禅》笔记摘录 - 10.装饰模式
笔记·设计模式
悠哉悠哉愿意13 小时前
【电赛学习笔记】MaxiCAM 项目实践——与单片机的串口通信
笔记·python·单片机·嵌入式硬件·学习·视觉检测
岩中竹14 小时前
广东省省考备考——常识:科技常识(持续更新)
笔记
Olrookie14 小时前
若依前后端分离版学习笔记(三)——表结构介绍
笔记·后端·mysql
rannn_11115 小时前
Java学习|黑马笔记|Day23】网络编程、反射、动态代理
java·笔记·后端·学习
UQWRJ16 小时前
菜鸟教程 R语言基础运算 注释 和数据类型
笔记