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


    }
相关推荐
Red Red2 小时前
网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务
网络·笔记·学习·安全·web安全
贰十六2 小时前
笔记:Centos Nginx Jdk Mysql OpenOffce KkFile Minio安装部署
笔记·nginx·centos
知兀2 小时前
Java的方法、基本和引用数据类型
java·笔记·黑马程序员
醉陌离4 小时前
渗透测试笔记——shodan(4)
笔记
LateBloomer7774 小时前
FreeRTOS——信号量
笔记·stm32·学习·freertos
legend_jz4 小时前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
Komorebi.py4 小时前
【Linux】-学习笔记04
linux·笔记·学习
fengbizhe5 小时前
笔试-笔记2
c++·笔记
余为民同志5 小时前
mini-lsm通关笔记Week2Day4
笔记
墨染风华不染尘5 小时前
python之开发笔记
开发语言·笔记·python