Java|retryer实现接口重试机制

Java|retryer实现接口重试机制

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;
【Java|retryer实现接口重试机制】import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
/**
* @author watson
* @date 2021/7/7 15:33
* @Description: TODO
**/@Slf4jpublic class ert {
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);