使用场景

在日常开发中,我们经常会遇到需要调用外部服务和接口的场景。外部服务对于调用者来说一般都是不可靠的,尤其是在网络环境比较差的情况下,网络抖动很容易导致请求超时等异常情况,这时候就需要使用失败重试策略重新调用 API 接口来获取。重试策略在服务治理方面也有很广泛的使用,通过定时检测,来查看服务是否存活。

Guava Retrying 是一个灵活方便的重试组件,包含了多种的重试策略,而且扩展起来非常容易。

用作者的话来说:

This is a small extension to Google’s Guava library to allow for the creation of configurable retrying strategies for an arbitrary function call, such as something that talks to a remote service with flaky uptime.

使用 Guava-retrying 你可以自定义来执行重试,同时也可以监控每次重试的结果和行为,最重要的基于 Guava 风格的重试方式真的很方便。

网上关于guava-retrying的介绍很多,我就不赘述了,这里有一篇写的比较好的文章:

Guava-retry: 基于 guava 的重试组件

在此基础上我封装了一个Util:

/**
* Created by libing6@xiaomi.com on 18-7-12.
*/
@Log4j2
public class RetryUtil { //出现异常则执行重试,每次任务执行最长执行时间限定为 3 s,重试间隔时间初始为 3 s,最多重试 10秒,随着重试次数的增加每次递增 1 s,每次重试失败,打印日志;
public static <T> Retryer<T> getADefaultRetryer() {
Retryer<T> retryer = RetryerBuilder.<T>newBuilder()
.retryIfException()
.withStopStrategy(
StopStrategies.stopAfterDelay(10, TimeUnit.SECONDS))
.withWaitStrategy(
WaitStrategies.incrementingWait(3, TimeUnit.SECONDS, 1, TimeUnit.SECONDS))
.withAttemptTimeLimiter(
AttemptTimeLimiters.fixedTimeLimit(3, TimeUnit.SECONDS))
.withRetryListener(new RetryListener() {
@Override
public <V> void onRetry(Attempt<V> attempt) {
log.debug("retry time = " + attempt.getAttemptNumber());
if (attempt.hasException()) {
log.error("try failed", attempt.getExceptionCause());
}
}
})
.build(); return retryer;
} // Todo 可以定制参数
}

使用方法仅需一句话:

RetryUtil.<String>getADefaultRetryer()
.call(() -> getClient().getDataById(id));

Guava-retry,java重试组件的更多相关文章

  1. 【Guava】基于guava的重试组件Guava-Retryer

    一.使用场景 在日常开发中,我们经常会遇到需要调用外部服务和接口的场景.外部服务对于调用者来说一般都是不可靠的,尤其是在网络环境比较差的情况下,网络抖动很容易导致请求超时等异常情况,这时候就需要使用失 ...

  2. 更好的 java 重试框架 sisyphus 背后的故事

    sisyphus 综合了 spring-retry 和 gauva-retrying 的优势,使用起来也非常灵活. 今天,让我们一起看一下西西弗斯背后的故事. 情景导入 简单的需求 产品经理:实现一个 ...

  3. 更好的 java 重试框架 sisyphus 入门简介

    What is Sisyphus sisyphus 综合了 spring-retry 和 gauva-retrying 的优势,使用起来也非常灵活. 为什么选择这个名字 我觉得重试做的事情和西西弗斯很 ...

  4. 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍

    回顾 我们前面学习了 更好的 java 重试框架 sisyphus 入门简介 更好的 java 重试框架 sisyphus 背后的故事 这一节让我们一起学习下 sisyphus 基于函数式的配置和注解 ...

  5. 更好的 java 重试框架 sisyphus 的 3 种使用方式

    回顾 我们前面学习了 更好的 java 重试框架 sisyphus 入门简介 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍 更好的 java 重试框架 sisyphus 背后的 ...

  6. 在 Java EE 组件中使用 Camel Routes

    摘要:你可以通过集成 Camel 和 WildFly 应用服务器(使用 WildFly-Camel 子系统)在 Java EE 组件中开始使用 Apache Camel Routes. [编者按]作者 ...

  7. Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新

    Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新 摘自: https://blog.csdn.net/johnson_moon/article/details/7887449 ...

  8. Java基础组件快速入门

    最近需要上线很多新的JAVA项目,然而很多JAVA的相关库都不太熟悉,项目实现起来遇到了不小阻力,熬了好几天夜.现在手头的工作基本完成了,因此打算好好来归纳下java的相关工具库,将来需要借助你们,好 ...

  9. java日志组件介绍(common-logging,log4j,slf4j,logback )

    转自:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging是apache提供的一个通用的日志 ...

随机推荐

  1. Day13_73_死锁

    死锁 什么是死锁? - 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 死锁出现的原因? (1) 因为系统资源不足. 如果系统资源充足 ...

  2. k8s 安装 rabbitMQ 单机版

    rabbitMQ docker镜像使用rabbitmq:3.8-management service.yaml文件 apiVersion: v1 kind: Service metadata: nam ...

  3. 1002 A+B for Polynomials (25分)

    This time, you are supposed to find A+B where A and B are two polynomials. Input Specification: Each ...

  4. 手动脱Mole Box V2.6.5壳实战

    作者:Fly2015 这个程序是吾爱破解脱壳练习第8期的加壳程序,该程序的壳是MoleBox V2.6.5壳,之前也碰过该种壳但是这个程序似乎要复杂一点. 首先对加壳程序进行侦壳处理. Exeinfo ...

  5. C#-几个STL相关

    C#结构体排序 1................................................. 声明 struct data { public string A; public ...

  6. Windows PE 第十二章 PE变形技术

    PE变形技术 这章东西太多,太细了.这里我只记录了一些重点概念.为后面学习做铺垫. PE变形:改变PE结构之后,PE加载器依然可以成功加载运行我们的程序. 一 变形常用技术: 结构重叠技术.空间调整技 ...

  7. WideCharToMultiByte 与 MultiByteToWideChar

    先看看这篇关于Windows编码的文章:http://blog.csdn.net/shyboy_nwpu/article/details/4431668 再看看这篇关于两个函数参数和用法的说明:htt ...

  8. 鼠标右键添加vscode

    实现效果 右键文件夹,可以使用vscode打开 右键文件,可以使用vscode打开 右键空白处,可以使用vscode打开 进行实现 下载压缩包 为了方便操作,和减少错误,将.reg文件上传到网盘中,点 ...

  9. JDBC往数据库里插入数据

    首先还是一个工具类 插入数据

  10. Raspberry PI 4B 安装和配置 Raspbian

    做记录,以备之后需要,待完成中 目录 做记录,以备之后需要,待完成中 下载镜像和安装程序 ssh 远程访问 下载镜像和安装程序 Raspbian: installer: ssh 远程访问 开启ssh ...