Другая конфигурация повторных попыток для 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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