为了方便使用,在1.2.0版本中增加了重试策略。默认的重试策略为请求异常重试,包括请求超时和连接异常。
1.QuickStart;
a) 首先需要升级版本为1.2.0;
<dependency>
<groupId>com.github.youzan</groupId>
<artifactId>http-fetch</artifactId>
<version>1.2.0</version>
</dependency>
b) HttpApi注解中增加了retry和retryPolicy两个变量;
retry:重试次数;
retryPolicy:重试策略,默认为ConnectFailureRetryPolicy,超时和连接异常会进行重试;
2.自定义重试策略;
类图:
所有的重试策略需要继承RetryPolicy接口,并实现needRetry函数。
/**
* 重试校验接口
*/
public interface RetryPolicy {
/**
*
* @param result http请求结果
* @param retryTimes 重试次数
* @param remainRetryTimes 剩余重试次数
* @return
*/
boolean needRetry(HttpResult result, int retryTimes, int remainRetryTimes);
}
ConnectFailureRetryPolicy:
public class ConnectFailureRetryPolicy implements RetryPolicy {
private static final Logger LOGGER = LoggerFactory.getLogger(ConnectFailureRetryPolicy.class);
/**
* 如果是网络异常则重试
* @param result http请求结果
* @param retryTimes 重试次数
* @param remainRetryTimes 剩余重试次数
* @return
*/
@Override
public boolean needRetry(HttpResult result, int retryTimes, int remainRetryTimes) {
Exception e = result.getException();
if(e instanceof SocketTimeoutException || e instanceof ConnectException){
LOGGER.info("超时重试: {}, 重试次数: {} 剩余次数: {}", e, retryTimes, remainRetryTimes);
return true;
}
return false;
}
}
实现完自己的重试策略后,只需要在HttpApi注解中设置retryPolicy的值就可以了。
希望可以多多提议,也希望可以帮助到大家:
https://github.com/youzan/httpfetch