FAILSAFE-在重试时采取一些措施,然后再尝试一次



我有一个用例,我需要在其中调用update/delete rest端点,这可能会返回有关锁定用于编辑的实体的异常。我想等待一段时间以解锁实体,否则呼叫力解锁端点,然后再致电我的原始请求。通过以某种方式使用failsafe?

我到目前为止尝试的是:

lockRetryPolicy = new RetryPolicy()
            .retryOn(LockException.class)
            .withBackoff(1, 8, TimeUnit.MINUTES)
            .withMaxDuration(30, TimeUnit.MINUTES);

private <R, T> R lockRetryExecution(String elementUrl, Callable<R> task) {
    return Failsafe.with(lockRetryPolicy)
            .onRetriesExceeded((o, throwable) -> {
                forceUnlock(elementUrl);
                task.call();
            })
            .withFallback((o, throwable) -> o)
            .get(task);
}

但是,使用这种方法,我必须自己进行最后的"重试",并且无法获得此操作的结果。

看起来很有效。

private <R, T> R lockRetryExecution(String elementUrl, Callable<R> task) {
    return Failsafe.with(lockRetryPolicy)
        .onRetriesExceeded((o, throwable) -> forceUnlock(elementUrl))
        .withFallback(task)
        .get(task);
}

相关内容

  • 没有找到相关文章

最新更新