Централизованная обработка ошибок для FeignClient: ErrorDecoder, Resilience4j и пользовательские исключения с контекстомJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Централизованная обработка ошибок для FeignClient: ErrorDecoder, Resilience4j и пользовательские исключения с контекстом

Сообщение Anonymous »

Я разрабатываю приложение Spring Boot, которое использует внешние API через Spring-cloud-starter-openfeign. Я также использую Resilience4j для автоматического выключателя и повторных попыток.
Моя цель — реализовать централизованную стратегию обработки ошибок, которая охватывает:
  • Бизнес-исключения: Сопоставление кодов состояния 4xx/5xx с пользовательскими исключениями.
  • Контекстные данные: Я хочу, чтобы мои пользовательские исключения содержали исходную PathVariable (или параметры запроса), чтобы облегчить регистрацию и отладку в @ControllerAdvice.
  • Отказы устойчивости: Обработка тайм-аутов и ошибок 503 (часто заключенных в RetryableException Feign) без потери возможности активировать автоматический выключатель.
Проблема:

Feign оборачивает большинство сетевых проблем в исключение RetryableException. Кроме того, я изо всех сил пытаюсь найти лучший способ извлечь определенную PathVariable из запроса при возникновении ошибки, чтобы я мог создать экземпляр своего собственного исключения с этим контекстом (например, UserNotFoundException(userId)).

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

@FeignClient(name = "user-service", configuration = FeignConfig.class)
public interface UserClient {
@GetMapping("/users/{id}")
UserResponse getUserById(@PathVariable("id") String id);
}
Вопросы:
  • Как реализовать ErrorDecoder, который извлекает {id из пути запроса и включает его в пользовательское исключение?
  • Как лучше всего обрабатывать эти исключения централизованно? Должен ли я позволить ErrorDecoder генерировать исключение и перехватывать его в @RestControllerAdvice?
  • Как выключатель Resilience4j взаимодействует с пользовательскими исключениями, создаваемыми ErrorDecoder? Нужно ли мне явно указывать Resilience4j, какие исключения должны (или не должны) вызывать изменение состояния?
Я был бы признателен за краткий пример, показывающий интеграцию ErrorDecoder (с контекстом запроса) + Resilience4j + @ControllerAdvice.
Ответить

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

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

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

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

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