我有一个用例,我需要调用 UPDATE/DELETE Rest 端点,这可能会返回有关实体被锁定以进行编辑的异常。我想等待一些时间来解锁实体,否则调用强制解锁端点并再调用一次我的原始请求。这有可能以某种方式进行故障保护吗?
到目前为止我尝试了什么:
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);
}
但是,使用这种方法,我必须自己进行最后一次“重试”并且无法获得此操作的结果。