La integración de interruptor, remarcado y timelimiter en Resilience4j

votos
0

Estoy tratando de utilizar las funciones Resilience4j. Mi caso de uso es la combinación de módulos del interruptor automático, reintentos y timelimiter. Esto es lo que he intentado.

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

La cuestión aquí es, mis doSomething (método) realiza dos veces. Alguien ha visto este problema antes? Quiero combinar todos estos módulos y ejecutar el método de una sola vez. Gracias por tu ayuda.

Publicado el 13/02/2020 a las 23:59
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

está utilizando timeLimiter.executeFutureSupplierel que se ejecuta el futuro en lugar de decorarlo. Por favor, use exactamente en este orden:

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();
Respondida el 14/02/2020 a las 09:53
fuente por usuario

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