分享免费的编程资源和教程

网站首页 > 技术教程 正文

java访问重试-guava java访问方法

goqiw 2024-09-25 20:13:18 技术教程 28 ℃ 0 评论


引入pom

<dependency>


<groupId>com.github.rholder</groupId>


<artifactId>guava-retrying</artifactId>


<version>2.0.0</version>


</dependency>

代码示例

以下会简单列出 guava-retrying 的使用方式:

出现异常则执行重试,每次任务执行最长执行时间限定为 3 s,重试间隔时间初始为 3 s,最多重试 1 分钟,随着重试次数的增加每次递增 1 s,每次重试失败,打印日志;

@Override


public Integer call() throws Exception {


return 2;


}


};


Retryer<Integer> retryer = RetryerBuilder.<Integer>newBuilder()


.retryIfException()


.withStopStrategy(StopStrategies.stopAfterDelay(30,TimeUnit.SECONDS))


.withWaitStrategy(WaitStrategies.incrementingWait(3, TimeUnit.SECONDS,1,TimeUnit.SECONDS))


.withAttemptTimeLimiter(AttemptTimeLimiters.<Integer>fixedTimeLimit(3,TimeUnit.SECONDS))


.withRetryListener(new RetryListener() {


@Override


public <V> void onRetry(Attempt<V> attempt) {


if (attempt.hasException()){


attempt.getExceptionCause().printStackTrace();


}


}


})


.build();


try {


retryer.call(task);


} catch (ExecutionException e) {


e.printStackTrace();


} catch (RetryException e) {


e.printStackTrace();


}

主要接口介绍:

1、Attempt:一次执行任务;

2、AttemptTimeLimiter:单次任务执行时间限制(如果单次任务执行超时,则终止执行当前任务);

3、BlockStrategies:任务阻塞策略(通俗的讲就是当前任务执行完,下次任务还没开始这段时间做什么……),默认策略为:BlockStrategies.THREADSLEEPSTRATEGY 也就是调用 Thread.sleep(sleepTime);

4、RetryException:重试异常;

5、RetryListener:自定义重试监听器,可以用于异步记录错误日志;

6、StopStrategy:停止重试策略,提供三种:

StopAfterDelayStrategy :设定一个最长允许的执行时间;比如设定最长执行10s,无论任务执行次数,只要重试的时候超出了最长时间,则任务终止,并返回重试异常RetryException; NeverStopStrategy :不停止,用于需要一直轮训知道返回期望结果的情况; StopAfterAttemptStrategy :设定最大重试次数,如果超出最大重试次数则停止重试,并返回重试异常;

7、WaitStrategy:等待时长策略(控制时间间隔),返回结果为下次执行时长:

FixedWaitStrategy:固定等待时长策略; RandomWaitStrategy:随机等待时长策略(可以提供一个最小和最大时长,等待时长为其区间随机值) IncrementingWaitStrategy:递增等待时长策略(提供一个初始值和步长,等待时间随重试次数增加而增加) ExponentialWaitStrategy:指数等待时长策略; FibonacciWaitStrategy :Fibonacci 等待时长策略; ExceptionWaitStrategy :异常时长等待策略; CompositeWaitStrategy :复合时长等待策略;

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表