Я использую 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
не работает.