作者: 西魏陶渊明
博客: https://blog.springlearn.cn/

西魏陶渊明
天下代码一大抄, 抄来抄去有提高, 看你会抄不会抄!

一、简介

Guava-retry
Guava 是一组来自 Google 的核心 Java 库,其中包括新的集合类型(例如 multimap 和 multiset)、不可变集合、图形库以及用于并发、I/O、散列、缓存、原语、字符串等的实用程序!它广泛用于 Google
内部的大多数 Java 项目,也被许多其他公司广泛使用。

API 非常的简单,我们可以非常轻松的使用,来封装成我们业务中自己的组件。

二、依赖

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

三、使用

3.1 指定异常

配置如果发生了 Exception 异常进行重试

    Retryer<User> retry = RetryerBuilder.<User>newBuilder()//发生ConnectException异常时重试.retryIfExceptionOfType(Exception.class)//重试的等待策略 初始等待1s,每次递增1s。如:第一次1s,第二次2s,第三次3s,以此类推....withWaitStrategy(WaitStrategies.incrementingWait(1, TimeUnit.SECONDS, 1, TimeUnit.SECONDS))//重试3次后停止.withStopStrategy(StopStrategies.stopAfterAttempt(3)).build();

3.2 重试策略

WaitStrategy 重试策略

    Retryer<User> retry = RetryerBuilder.<User>newBuilder()//发生ConnectException异常时重试.retryIfExceptionOfType(Exception.class)//重试的等待策略 初始等待1s,每次递增1s。如:第一次1s,第二次2s,第三次3s,以此类推....withWaitStrategy(WaitStrategies.incrementingWait(1, TimeUnit.SECONDS, 1, TimeUnit.SECONDS))//重试3次后停止.withStopStrategy(StopStrategies.stopAfterAttempt(3)).build();
策略 使用方法 说明
固定策略 WaitStrategies.fixedWait(10,TimeUnit.SECONDS) 每10秒执行一次
随机策略 WaitStrategies.randomWait(100,TimeUnit.SECONDS) 0 到 100秒之间随机执行一次
随机策略 WaitStrategies.randomWait(10,TimeUnit.SECONDS,20,TimeUnit.SECONDS) 10 到 20秒之间随机执行一次
递增策略 WaitStrategies.incrementingWait(1, TimeUnit.SECONDS, 1, TimeUnit.SECONDS) 初始等待1s,每次递增1s。如:第一次1s,第二次2s,第三次3s,以此类推…
异常策略 WaitStrategies.exceptionWait(…) 不同的异常返回不同的重试时间
斐波那契数列策略 WaitStrategies.fibonacciWait(…) 1、1、2、3、5、8、13、21类推

3.3 重试监听器

Attempt 代表每次执行动作,可以获取执行次数,打印执行日志

 Retryer<User> retry = RetryerBuilder.<User>newBuilder()//发生ConnectException异常时重试.retryIfExceptionOfType(Exception.class)//重试的等待策略 初始等待1s,每次递增1s。如:第一次1s,第二次2s,第三次3s,以此类推....withWaitStrategy(WaitStrategies.incrementingWait(1, TimeUnit.SECONDS, 1, TimeUnit.SECONDS))//重试监听器.withRetryListener(new RetryListener() {@Overridepublic <V> void onRetry(Attempt<V> attempt) {System.out.println("重试次数:" + attempt.getAttemptNumber());System.out.println("异常:" + attempt.getExceptionCause());System.out.println("返回值:"+attempt.get());}})//重试3次后停止.withStopStrategy(StopStrategies.stopAfterAttempt(10)).build();

3.4 停止策略

StopStrategy 一般常用的就是重试多少次

 Retryer<User> retry = RetryerBuilder.<User>newBuilder()//发生ConnectException异常时重试.retryIfExceptionOfType(Exception.class)//重试的等待策略 初始等待1s,每次递增1s。如:第一次1s,第二次2s,第三次3s,以此类推....withWaitStrategy(WaitStrategies.incrementingWait(1, TimeUnit.SECONDS, 1, TimeUnit.SECONDS))//重试3次后停止.withStopStrategy(StopStrategies.stopAfterAttempt(10)).build();
  • StopAfterDelayStrategy :设定一个最长允许的执行时间;比如设定最长执行10s,无论任务执行次数,只要重试的时候超出了最长时间,则任务终止,并返回重试异常RetryException;
  • NeverStopStrategy :不停止,用于需要一直轮训直到返回期望结果的情况;
  • StopAfterAttemptStrategy :设定最大重试次数,如果超出最大重试次数则停止重试,并返回重试异常;

第04篇:Guava-retry重试组件相关推荐

  1. Spring-retry重试组件

    # 一.简介 Spring-retry 前面我们了解到了,Guava的重试组件,我们可以基于Guava的能力,来封装我们需要的能力来满足我们的业务.今天来分享Spring-Retry重试组件.当然Sp ...

  2. Google Guava Retry 优雅的重试方案

    Google Guava Retry 优雅的重试方案 前言 使用场景 什么场景不适合重试 了解幂等性 一.Guava Retry是什么? 与Spring retry比较 二.使用步骤 1.引入库 2. ...

  3. 从0到1带你手撸一个请求重试组件,不信你学不会!

    点击关注公众号,实用技术文章及时了解 背景介绍 在实际的项目应用场景中,经常会需要遇到远程服务接口的调用,时不时会出现一些接口调用超时,或者函数执行失败需要重试的情况,例如下边的这种场景: 某些不太稳 ...

  4. retry重试常见场景及实现

    retry重试常见场景及实现 当我们的代码是有访问网络相关的操作时,比如http请求或者访问远程数据库,经常可能会发生一些错误,有些错误可能重新去发送请求就会成功,本文分析常见可能需要重试的场景,并最 ...

  5. Xamarin Android组件篇教程RecylerView动画组件RecylerViewAnimators(1)

    Xamarin Android组件篇教程RecylerView动画组件RecylerViewAnimators(1) RecyclerView是比ListView和GridView更为强大的布局视图, ...

  6. JQuery学习04篇(层次选择器)

    直接po图和代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  7. Ubuntu22.04篇---安装微信,QQ,企业微信

    Ubuntu22.04篇---安装微信,QQ,企业微信 1.企业微信安装方法 2.微信安装方法 3.QQ安装方法 微信,企业微信,QQ 在Ubuntu20.04下通过优麒麟官网应用下载提供的wine版 ...

  8. foxmail邮件加载失败重试_java retry(重试) spring retry, guava retrying 详解

    系列说明 java retry 的一步步实现机制. java-retry 源码地址 情景导入 简单的需求 产品经理:实现一个按条件,查询用户信息的服务. 小明:好的.没问题. 代码 UserServi ...

  9. java retry(重试) spring retry, guava retrying 详解

    转载 自 http://blog.51cto.com/9250070/2156431 系列说明 java retry 的一步步实现机制. java-retry 源码地址 情景导入 简单的需求 产品经理 ...

最新文章

  1. 清除应用数据后,应用对应的widget的数据无法刷新
  2. PostgreSQL-JDBC疑似bug:部分接口参数的表名、列名必须全部小写
  3. oracle 将查询出的数据加1-10_PostgreSQL数据库跨库访问
  4. 阿里巴巴开源 Dragonwell JDK 最新版本 8.1.1-GA 发布
  5. 用Python实现快速排序
  6. 给你的博客换个装-园子换装指南
  7. 【CodeForces - 471C】MUH and House of Cards (思维,找规律)
  8. linux修改文件句柄数生效_linux系统层面调优和常见的面试题
  9. 小米再回应造车传闻:一直关注,还没正式立项
  10. ionic3.0--angular4.0 引入第三方插件库的方法
  11. 回复 Timer008 的一个类型转换的问题 - 不是很典型, 对其他人参考价值不大
  12. $2a开头的是什么加密方式_为什么非对称加密比对称加密慢?
  13. windows游戏编程 (一) 了解WinMain函数,创建一个信息框
  14. 【Axure报错】-Unable to connect to Axure Share. Please make sure you have an internet connection and try
  15. 财智6出免费版本了,不需要在找破解了哈哈!
  16. 计算小于100的最大素数
  17. 10年老程序员:到底是学前端好还是后端好?
  18. 蓝桥杯 第39级台阶
  19. 工具-4:图片识别和音乐在线识别
  20. 直接使用Jlink仿真器下载程序至Freescale K60系列 MCU

热门文章

  1. WebSocket+Vue+SpringBoot实现语音通话
  2. R语言实现常用多重比较方法
  3. 八月英语——近朱者赤
  4. NAXX Demo4_GZQ_02
  5. Qt-C++基础界面开发(2- 简单Display Widget控件和Item Widget控件的使用)
  6. 天津市数字经济行业投资策略研究及发展方向建议报告2022-2027年
  7. Fisher算法分析
  8. HTML5期末大作业:旅游网站设计——开心旅游网(15页) HTML+CSS+JavaScript 主题度假酒店
  9. 中移互联网Java后台开发一二面
  10. 微信下载文件的实现方法