使用番石榴重试框架以固定的时间间隔保持重试
Using guava retry framework to keep retrying at fixed interval of time
我在我的一个项目中使用 Guava 重试。如果我的方法不 return 正确,我想继续以固定的时间间隔重试。一旦 return 为真,它就应该停止。
public static void main(String[] args) {
Callable<Boolean> callable = new Callable<Boolean>() {
public Boolean call() throws Exception {
System.out.println("hello: " + new Date());
boolean status = false;
return status;
}
};
Retryer<Boolean> retryer =
RetryerBuilder.<Boolean>newBuilder().retryIfResult(Predicates.<Boolean>alwaysTrue())
.withWaitStrategy(WaitStrategies.fixedWait(1, TimeUnit.MINUTES))
.withStopStrategy(StopStrategies.neverStop()).build();
try {
boolean abc = retryer.call(callable);
System.out.println("world" + abc);
} catch (RetryException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
我得到了上面的代码,它每隔一分钟就会重试一次。现在,如果在运行时,我将 status 的值更改为 true
,那么它应该会停止,但它并没有停止。知道我在做什么错吗?
您使用了错误的谓词。您的谓词总是 return 'true' 并忽略重试的测试结果。提供正确的谓词:
Predicate<Boolean> predicate = new Predicate<Boolean>() {
@Override
public boolean apply(Boolean input) {
return !input;
}
};
RetryerBuilder.<Boolean>newBuilder().retryIfResult(predicate)
您可以在这里修改:
RetryerBuilder.<Boolean>newBuilder().retryIfResult(Predicates.<Boolean>.equalTo(true))
然后当结果变为false时,重试将停止。
我在我的一个项目中使用 Guava 重试。如果我的方法不 return 正确,我想继续以固定的时间间隔重试。一旦 return 为真,它就应该停止。
public static void main(String[] args) {
Callable<Boolean> callable = new Callable<Boolean>() {
public Boolean call() throws Exception {
System.out.println("hello: " + new Date());
boolean status = false;
return status;
}
};
Retryer<Boolean> retryer =
RetryerBuilder.<Boolean>newBuilder().retryIfResult(Predicates.<Boolean>alwaysTrue())
.withWaitStrategy(WaitStrategies.fixedWait(1, TimeUnit.MINUTES))
.withStopStrategy(StopStrategies.neverStop()).build();
try {
boolean abc = retryer.call(callable);
System.out.println("world" + abc);
} catch (RetryException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
我得到了上面的代码,它每隔一分钟就会重试一次。现在,如果在运行时,我将 status 的值更改为 true
,那么它应该会停止,但它并没有停止。知道我在做什么错吗?
您使用了错误的谓词。您的谓词总是 return 'true' 并忽略重试的测试结果。提供正确的谓词:
Predicate<Boolean> predicate = new Predicate<Boolean>() {
@Override
public boolean apply(Boolean input) {
return !input;
}
};
RetryerBuilder.<Boolean>newBuilder().retryIfResult(predicate)
您可以在这里修改:
RetryerBuilder.<Boolean>newBuilder().retryIfResult(Predicates.<Boolean>.equalTo(true))
然后当结果变为false时,重试将停止。