Resilience4J - глобальный резервный метод

Вопрос относительно Resilience4j в сочетании со стартером SpringBoot.

В документе здесь: https://resilience4j.readme.io/docs/getting-started-3 В нем упоминается: вы можете определить один глобальный резервный метод с параметром исключения только в том случае, если несколько методов имеют один и тот же возвращаемый тип, и вы хотите определить для них один и тот же резервный метод раз и навсегда.

У кого-нибудь есть пример, пожалуйста?

Я просмотрел демонстрацию https://github.com/resilience4j/resilience4j-spring-boot2-demo и можно было увидеть повторяющиеся методы

 private Flux<String> fluxFallback(Exception ex) {
        return Flux.just("Recovered: " + ex.toString());
    }

У меня такой же случай, у меня есть около двенадцати классов, которые используют один и тот же резервный метод. Список чего-либо по умолчанию.

Глядя на демонстрацию, я собираюсь скопировать и вставить этот запасной вариант списка по умолчанию двенадцать раз. Я уверен, что есть более разумный способ сделать это. Просто я не нашел.

У кого-нибудь есть фрагмент, пожалуйста?

Спасибо


person PatPatPat    schedule 22.10.2020    source источник


Ответы (1)


Глобальный резервный метод возможен только для одного класса. В настоящее время нет способа определить глобальный резервный метод, который может использоваться несколькими классами.

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

person Robert Winkler    schedule 23.10.2020
comment
Понял. Спасибо. У вас есть какой-нибудь пример извлечения резервной логики в один класс, я имею в виду, что будет в аннотации? fallback = SingleClass.fallback? Кроме того, есть ли способ просто повторно выбросить исключение? У меня есть совет контролеру, он может помочь перехватить все откаты и избежать копирования. - person PatPatPat; 23.10.2020
comment
Под извлечением резервной логики в один класс я имею в виду: просто создайте новый класс, добавьте аннотацию @Component и вставьте его в класс, в котором вы определили резервный метод, и делегируйте его новому классу. Сравним с ControllerAdvice, но не зависит от уровня обслуживания и протокола. ControllerAdvice обычно специфичен для HTTP. - person Robert Winkler; 26.10.2020