项目开发中,调用第三方接口会因为网络延迟、异常导致调用的服务出错,重试几次可能就会调用成功(例如上传图片),所以需要一种重试机制进行接口重试来保证接口的正常执行。重试机制除了用代码实现外,guava-retry可以灵活的实现这一功能,
github 地址: https://github.com/rholder/guava-retrying/tree/master/src/main/java/com/github/rholder/retry
本文首先介绍如何用java代码实现接口的重试机制,然后介绍下guava-retry的使用。
一、Java自己实现接口重试机制
首先需要一个服务,比如图片上传服务:
public boolean uploadPicture(String fileName, int count) {
System.out.println("开始上传文件:" + fileName);
// 模拟在第3次重试成功
if (count == 3) {
System.out.println("文件上传成功, 重试次数:" + count);
return true;
}
// 模拟因网络等原因导致的图片上传服务超时
return false;
}
在接口中模拟因网络故障,每次上传操作都是失败的,这个时候调用图片上传接口时需要重试3次,代码实现如下:
public void uploadFile(String fileName, int retryTimes) {
PictureService pictureService = new PictureService();
boolean success = pictureService.uploadPicture(fileName);
if (retryTimes > 0) {
int count = 1;
while (!success && count <= retryTimes) {
System.out.println("第-" + count + "-次重试");
success = pictureService.uploadPicture(fileName);
count++;
}
}
return;
}
测试:
public static void main