Resilience4j возвращает CompletableFuture вокруг проверенного метода с параметром

Я не могу понять, как обернуть синхронный метод в Resilience4j, чтобы он возвращал CompletableFuture, хотя, похоже, это часть области target Resilience4j. Тем более, что синхронный метод, который я хочу обернуть, может вызвать исключение. Что я хочу в псевдокоде:

boolean void syncMethod(Parameter param) throws Exception {
    // May throw Exception due to connection/authorization problems.
}

CompletableFuture<Boolean> asyncResilience4jWrapper() {
    CompletableFuture<Boolean> result = 
        ...
            Resilience4j magic around "syncMethod(param)". 
            Trying 4 calls, interval between calls of 100 ms. 
        ...;
    return result;
}

Resilience4j следует просто попытаться вызвать метод 4 раза, пока он не сработает, с интервалами между вызовами в 100 мс, а затем завершить асинхронный вызов. Вызывающий asyncResilience4jWrapper должен просто вернуть CompletableFuture, который не блокирует и не заботится ни о чем из этого.

По-видимому, самая сложная часть - запустить его для метода с параметром, генерируя исключение!


person Jan    schedule 02.06.2020    source источник


Ответы (1)


просто делать

CompletableFuture<Boolean> asyncResilience4jWrapper(Parameter param) {
   return CompletableFuture<Boolean> future = Decorators.ofCallable(() -> syncMethod(param))
    .withThreadPoolBulkhead(threadPoolBulkhead)
    .withTimeLimiter(timeLimiter, scheduledExecutorService)
    .withCircuitBreaker(circuitBreaker)
    .withRetry(retry)
    .withFallback(asList(TimeoutException.class, CallNotPermittedException.class, BulkheadFullException.class),
      throwable -> "Hello from Recovery")
    .get().toCompletableFuture();
}
person Robert Winkler    schedule 02.06.2020
comment
Это сработало для вас? Если да, примите ответ - person Robert Winkler; 24.09.2020