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


    }
相关推荐
逸模7 分钟前
AI+BIM 重构连锁公装新范式 逸模打造数字化营建核心底座
大数据·人工智能·笔记·其他·信息可视化·重构
xqqxqxxq1 小时前
树结构技术学习笔记
数据结构·笔记·学习
十月的皮皮2 小时前
C语言学习笔记202606008- 三角形判断(3种方法)
c语言·笔记·学习
XGeFei2 小时前
【Fastapi学习笔记(6)】—— Fastapi文件上传、请求头自动转换
笔记·学习·fastapi
嘶哈哈哈2 小时前
嘉立创 EDA 入门实操笔记:从原理图到 PCB 布线、差分对、覆铜与 DRC 检查
开发语言·笔记·php
一口吃俩胖子2 小时前
【脉宽调制DCDC功率变换学习笔记024】频域性能
笔记·学习
吃着火锅x唱着歌2 小时前
深度探索C++对象模型 学习笔记 第五章 构造、解构、拷贝语意学(2)
c++·笔记·学习
Upsy-Daisy2 小时前
Hermes Agent 学习笔记 04:工具调用系统,让 Agent 从“会说”变成“会做”
java·笔记·学习
John_ToDebug2 小时前
在 Windows 上搭建 Chromium 148 内核编译环境:一份实战笔记
chrome·经验分享·笔记
快乐得小萝卜3 小时前
论文:π0.5
笔记·深度学习