L'integrazione di interruttore, tentativi e timelimiter in Resilience4j

voti
0

Sto cercando di utilizzare le funzioni Resilience4j. Il mio caso d'uso è di combinare moduli interruttore, Riprova e timelimiter. Ecco quello che ho provato.

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

Il problema qui è, i miei doSomething () metodo esegue due volte. Qualcuno ha visto questo problema prima? Voglio combinare tutti questi moduli ed eseguire il metodo solo una volta. Grazie per l'aiuto.

È pubblicato 13/02/2020 alle 21:59
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

si utilizza timeLimiter.executeFutureSupplierche esegue il futuro, invece di decorarlo. Si prega di utilizzare in proprio questo ordine:

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();
Risposto il 14/02/2020 a 07:53
fonte dall'utente

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