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();
        }


    }
相关推荐
dsywws2 分钟前
Linux学习笔记之时间日期和查找和解压缩指令
linux·笔记·学习
cuisidong19972 小时前
5G学习笔记三之物理层、数据链路层、RRC层协议
笔记·学习·5g
乌恩大侠2 小时前
5G周边知识笔记
笔记·5g
咔叽布吉3 小时前
【论文阅读笔记】CamoFormer: Masked Separable Attention for Camouflaged Object Detection
论文阅读·笔记·目标检测
johnny2333 小时前
《大模型应用开发极简入门》笔记
笔记·chatgpt
亦枫Leonlew3 小时前
微积分复习笔记 Calculus Volume 1 - 4.7 Applied Optimization Problems
笔记·数学·微积分·1024程序员节
小肥象不是小飞象3 小时前
(六千字心得笔记)零基础C语言入门第八课——函数(上)
c语言·开发语言·笔记·1024程序员节
星LZX3 小时前
WireShark入门学习笔记
笔记·学习·wireshark
努力变厉害的小超超5 小时前
ArkTS中的组件基础、状态管理、样式处理、class语法以及界面渲染
笔记·鸿蒙
aloha_78910 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot