Zintegrowanie wyłącznika, spróbuj ponownie i timelimiter w Resilience4j

głosy
0

Staram się korzystać z funkcji Resilience4j. Mój przypadek użycia jest łączenie modułów wyłącznika, spróbuj ponownie i timelimiter. Oto co próbowałem.

  Supplier<R> supplier = this::doSomething;
  timeLimiter.executeFutureSupplier(
          () -> CompletableFuture.supplyAsync(supplier));
  return Decorators.ofSupplier(supplier)
            .withCircuitBreaker(circuitBreaker)
            .withRetry(retry)
            .withBulkhead(bulkhead)
            .decorate();

Chodzi tu, moi doSomething () jest wykonywana metoda dwukrotnie. Czy ktoś widział ten problem wcześniej? Chcę połączyć wszystkie te moduły i wykonać metodę tylko raz. Dzięki za pomoc.

Utwórz 13/02/2020 o 21:59
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

używasz timeLimiter.executeFutureSupplierktóry wykonuje przyszłość zamiast dekorowania go. Proszę używać go w dokładnie tej kolejności:

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(3);
Supplier<R> supplier = this::doSomething;

CompletableFuture<R> future = Decorators.ofSupplier(supplier)
    .withThreadPoolBulkhead(threadPoolBulkhead)
    .withTimeLimiter(timeLimiter, scheduledExecutorService)
    .withCircuitBreaker(circuitBreaker)
    .withRetry(retry)
    .get().toCompletableFuture();
Odpowiedział 14/02/2020 o 07:53
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more