Resilience4j.retry с исключением не работает - PullRequest
0 голосов
/ 24 апреля 2020

Я использую resilience4j.retry с resilience4j.circuitbreaker . Service1 вызывает другую службу Service2, которая может выдавать исключения. Даже если я получаю исключения, я должен попытаться подключиться хотя бы в определенное время waitDuration * maxRetryAttempts.

Сервис1 ---> Вызов ---> Сервис2

application.yml

resilience4j.retry:
  instances:
    service1:
      maxRetryAttempts: 4
      waitDuration: 1000 #ms
      retryExceptions:  
        - org.apache.http.conn.HttpHostConnectException
        - org.apache.thrift.TException
        - java.net.ConnectException

Service1Repository. java

Service2Response response = CircuitBreaker.decorateSupplier(circuitBreaker,
                                    Retry.decorateSupplier(retry, () -> {
                                        try {
                                            return service2.getdata(params);
                                        } catch (TException e) {
                                            log.error("msg", e);
                                            throw new Service1Exception("msg", e);
                                        }
                                    })
                            ).get();

Однако, когда Service2 не работает, он не повторяет попытки (макс. 4 раза, каждый раз после 1000 мсек). Я получаю ответ (null в моем случае) сразу. Я пытался с увеличением значений (10000 мс), все то же самое. Я вижу, что журналы напечатаны, но служба должна ждать waitDuration * maxRetryAttempts, если Serviece2 не работает.

1 Ответ

0 голосов
/ 27 апреля 2020

Если вы хотите перехватить отмеченные исключения, вы должны использовать decorateCallable.

...