Другая конфигурация повторных попыток для Resilience4J в Spring Boot? ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Другая конфигурация повторных попыток для Resilience4J в Spring Boot?

Сообщение Anonymous »

Как настроить различное поведение повторных попыток Resilience4J для разных исключений с помощью Spring Boot?
У меня есть сервис, который использует Resilience4J для повышения устойчивости:
< pre class="lang-java Prettyprint-override">

Код: Выделить всё

@Service
class SomeService {

@RateLimiter(name = "rateLimiter")
@Retry(name = "retryTwice", fallbackMethod = "fallback")
void doSomethingImportant(int id) {
// do something important
}

void fallback(int id, Throwable throwable) {
// fallback logic
}
}
со следующей конфигурацией Spring Boot / Resilience4J:

Код: Выделить всё

resilience4j.retry:
instances:
retryTwice:
maxAttempts: 2
retryExceptions:
- org.springframework.web.client.HttpServerErrorException # remote server problem
- io.github.resilience4j.ratelimiter.RequestNotPermitted  # rate limit exceeded

resilience4j.ratelimiter:
limiters:
rateLimiter:
limitForPeriod: 1
limitRefreshPeriod: 1s
timeoutDuration: 3s
В попытке увеличить количество повторных попыток в случае превышения ограничения скорости я попытался добавить к методу вторую аннотацию @Retry:

Код: Выделить всё

@Service
class SomeService {

/*
* Second '@Retry' annotation added, does not compile
*/
@RateLimiter(name = "rateLimiter")
@Retry(name = "retryTwice", fallbackMethod = "fallback")
@Retry(name = "retryTenTimes", fallbackMethod = "fallback")
void doSomethingImportant(int id) {
// do something important
}

void fallback(int id, Throwable throwable) {
// fallback logic
}
}
и соответствующим образом обновите конфигурацию:

Код: Выделить всё

resilience4j.retry:
instances:
retryTwice:
maxAttempts: 2
retryExceptions:
- org.springframework.web.client.HttpServerErrorException # remote server problem
retryTenTimes:
maxAttempts: 10
retryExceptions:
- io.github.resilience4j.ratelimiter.RequestNotPermitted  # rate limit exceeded

resilience4j.ratelimiter:
limiters:
rateLimiter:
limitForPeriod: 1
limitRefreshPeriod: 1s
timeoutDuration: 3s
Проблема в том, что этот код не компилируется (поскольку @Retry не является аннотацией @Repeatable). Есть ли идиоматический способ решения этой проблемы? Если нет, то как я могу обойти это?


Подробнее здесь: https://stackoverflow.com/questions/791 ... pring-boot

Вернуться в «JAVA»