使用番石榴重试框架以固定的时间间隔保持重试

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时,重试将停止。