Integrando disjuntor, repetição e timelimiter em Resilience4j

votos
0

Eu estou tentando usar recursos Resilience4j. Meu caso de uso é combinar módulos de disjuntor, de repetição e timelimiter. Aqui está o que eu tentei.

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

A questão aqui é, meus doSomething () executa o método duas vezes. Alguém viu esse problema antes? Eu quero combinar todos estes módulos e executar o método apenas uma vez. Obrigado pela ajuda.

Publicado 13/02/2020 em 23:59
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

você estiver usando timeLimiter.executeFutureSupplierque executa o futuro em vez de decorá-la. Por favor, usá-lo em exatamente nesta ordem:

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();
Respondeu 14/02/2020 em 09:53
fonte usuário

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