retryer实现接口重试机制在日常开发中 , 经常会遇到需要调用外部服务和接口的场景 。 外部服务对于调用者来说一般是不靠谱的 , 尤其是在网络环境比较差的情况下 , 网络抖动很容易导致请求超时等异常情况 , 这时候需要使用失败重试调用API接口来获取 。
需要再引入guava-retrying包<dependency>
<groupId>com.github.rholder</groupId>
<artifactId>guava-retrying</artifactId>
<version>2.0.0</version>
</dependency>
实现代码示例如下:package com.watson.traffic.blog.trafficblog.sevice;
import com.github.rholder.retry.*;
import com.google.common.base.Predicates;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
/**
* @author watson
* @date 2021/7/7 15:33
* @Description: TODO
**/@Slf4jpublic class ert {
【Java|retryer实现接口重试机制】public static void main(String[
args) throws Exception {
Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder() // 设置自定义段元重试源
.retryIfResult(Predicates.<Boolean>isNull()) // 设置异常重试源
.retryIfExceptionOfType(Exception.class) // 设置异常重试源
.retryIfRuntimeException() // 设置重试次数 设置重试超时时间????
.withStopStrategy(StopStrategies.stopAfterAttempt(5)) // 设置每次重试间隔
.withWaitStrategy(WaitStrategies.fixedWait(5L TimeUnit.SECONDS))
.build();
Callable<Boolean> task = new Callable<Boolean>() { int i = 0; @Override
public Boolean call() throws Exception {
i++;
log.info(\"第{次执行!\" i); if (i < 3) {
log.info(\"模拟执行失败\"); throw new IOException(\"异常\");
return true;
; try {
retryer.call(task);
catch (ExecutionException e) {
log.error(\"error\" e);
catch (RetryException e) {
log.error(\"error\" e);
Boolean result = task.call();
log.info(\"成功输出结果:{\" result);
- Java|Java:Java 编程语言有什么好处?
- 芯片|中国芯片弯道超车,订单量实现10倍增长,中企纷纷启用国产芯片
- 海信|小米出了对讲机,可实现5000公里可以对讲。但是是依靠移动电信联通的4G网络!
- 亚马逊|三步实现亚马逊选品爆款突破
- 显卡|进军IT圈实现年薪30W
- Java|Java:为什么很多公司选择外包他们的 Java 开发项目?
- iOS|java开发是如何选择JDK和IDE的?
- Java|新人使用USB麦克风录制声音太小、卡顿、不清晰可能的原因
- Java|一大早,被京东的一个决定给镇住了:强子开始躺平了
- 显卡|超长续航办公无忧,用LG gram 16轻松实现