使用RetryerBuilder写一个重试请求
重试干什么用的
重试请求的作用是在网络通讯过程中,当请求失败或超时时自动重发请求,以提高请求的成功率和可靠性。重试请求通常在网络不稳定、服务器响应延迟或其他异常情况下使用,可以减少用户体验上的不良影响和错误提示。同时,在一些需要高可用性、高稳定性的场景中,重试请求也是必不可少的技术手段之一。具体实现方式可以通过设置超时时间、设置重试次数、使用指数退避算法等方式来实现。以下就写一个重试代码示例。
相关依赖
<dependency>
<groupId>com.github.rholder</groupId>
<artifactId>guava-retrying</artifactId>
</dependency>
重试方法
private String retryCode(List<Map<String, String>> list) {
Retryer<String> retryer = RetryerBuilder.<String>newBuilder()
//无论出现什么异常,都进行重试
.retryIfException()
//返回结果为 error时,进行重试
.retryIfResult(result -> StrUtil.isBlank(result))
//重试等待策略:等待 2s 后再进行重试
.withWaitStrategy(WaitStrategies.fixedWait(2, TimeUnit.SECONDS))
//重试停止策略:重试达到 3 次
.withStopStrategy(StopStrategies.stopAfterAttempt(3))
.withRetryListener(new RetryListener() {
@Override
public <V> void onRetry(Attempt<V> attempt) {
log.info("RetryListener: 第" + attempt.getAttemptNumber() + "次调用");
}
})
.build();
try {
return retryer.call(() ->
//自己的业务代码
myService.myCode(list)
);
} catch (Exception e) {
log.error("调用失败 e={}", e.getMessage());
}
return "";
}