当前位置: 首页 > news >正文

guava-retry使用笔记

guava-retry使用笔记

xml依赖

<dependency><groupId>com.github.rholder</groupId><artifactId>guava-retrying</artifactId><version>2.0.0</version>    </dependency>

使用案例

重试3次,每次间隔3秒

 /*** 重试3次,每次间隔3秒*/@Testvoid 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();}}

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

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

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

 @Testvoid 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();}}
http://www.lryc.cn/news/115537.html

相关文章:

  • P1226 【模板】快速幂 | 取余运算
  • 常用开源的弱口令检查审计工具
  • 云监控插件cloudmonitor安装保姆级教程
  • 借用和引用
  • WPF上位机9——Lambda和Linq
  • 从0到1搭建uniapp
  • 安全杂记 - Linux文本三剑客之awk
  • Android 开发者选项日志存储路径
  • jupyter lab build失败,提示需要安装版本>=12.0.0的nodejs但其实已从官网安装18.17.0版本 的解决方法
  • 【set】个人练习-Leetcode-817. Linked List Components
  • Linux IPIP隧道连通两个局域网
  • 华为QinQ技术的基本qinq和灵活qinq 2种配置案例
  • python爬虫1:基础知识
  • 【FAQ】安防监控视频EasyCVR平台分发的FLV视频流在VLC中无法播放
  • python爬虫2:requests库-原理
  • 纹理贴图和渲染
  • BLIP2
  • 陀螺玩具跨境电商亚马逊CPC认证
  • TS学习02-接口
  • WuThreat身份安全云-TVD每日漏洞情报-2023-08-09
  • 6. C++类的静态成员
  • 如何使Python Docker镜像安全、快速、小巧
  • AWS——03篇(AWS之Amazon S3(云中可扩展存储)-01入门)
  • 没有synchronized,rust怎么防并发?
  • 1.Python简介及安装(3.11.4)
  • face_recognition人脸识别与人脸检测
  • vue3获得url上的参数值
  • chapter15:springboot与监控管理
  • http历史版本
  • 【Go语言】Golang保姆级入门教程 Go初学者chapter2