您的位置:首页 > 其它

guava-retrying重试工具库: Retryer.call()使用注意事项

2016-12-27 14:17 507 查看
前面我们介绍了如何通过RetryerBuilder构造一个Retryer对象,现在我们学习下如何使用 Retryer.call()。这个API很重要,对于这个方法的入参、返回值、可能抛出的异常要了解清楚。



入参:很简单,就是一个实现了业务逻辑的Callable对象;返回值:某次尝试成功后,Callable的返回值。我们主要关注下可能的异常:RetryException和ExecutionException。

ExecutionException产生:传入的Callable执行过程中产生了异常,但是我们在构建Retryer对象的时候并没有考虑这种情况,就会抛出这个异常。抛出这异常,也就意味着重试终止。

private static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss,SSS");

public static void main(String[] args) throws Exception {

Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
.retryIfExceptionOfType(IOException.class)
.withWaitStrategy(WaitStrategies.fixedWait(1,TimeUnit.SECONDS))
.withStopStrategy(StopStrategies.stopAfterAttempt(5))
.build();

System.out.println("begin..." + df.format(new Date()));

try {
retryer.call(buildTask());
} catch (Exception e) {
e.printStackTrace();
}

System.out.println("end..." + df.format(new Date()));

}

private static Callable<Boolean> buildTask() {
return new Callable<Boolean>() {
private int i = 0;

@Override
public Boolean call() throws Exception {
System.out.println("called");
i++;
if (i == 1) {
throw new IOException();
} else {
throw new NullPointerException();
}
}
};
}


RetryException就很简单了,当所有重试介绍后,依然不能成功,那么就会抛这异常。

private static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss,SSS");

public static void main(String[] args) throws Exception {

Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
.retryIfException()
.withWaitStrategy(WaitStrategies.fixedWait(1,TimeUnit.SECONDS))
.withStopStrategy(StopStrategies.stopAfterAttempt(5))
.build();

System.out.println("begin..." + df.format(new Date()));

try {
retryer.call(buildTask());
} catch (Exception e) {
e.printStackTrace();
}

System.out.println("end..." + df.format(new Date()));

}

private static Callable<Boolean> buildTask() {
return new Callable<Boolean>() {
private int i = 0;

@Override
public Boolean call() throws Exception {
System.out.println("called");
i++;
if (i == 1) {
throw new IOException();
} else {
throw new NullPointerException();
}
}
};
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  guava-retrying