Сообщение об ошибке при интеграции Sentinel Feign: проблема циклической зависимости
[Решено] Проблема циклической зависимости Spring bean возникает, когда Sentinel интегрирует Feign
В обычных обстоятельствах служба заказов обычно вызывает службу пользователя. После введения feign вызовы, связанные с feign, извлекаются в проект feign-api. Затем при запуске сообщается об ошибке. Сообщение об ошибке следующее:
Осмотр места происшествия:
При использовании Sentinel обычно используется feign перед интеграцией Feign.order и пользовательских сервисов. При интеграции Sentinel возникла проблема, показанная выше.
Sentinel объединяет этапы Feign:
1. Добавьте feign в файл конфигурации вызывающей службы, чтобы запустить дозорную службу.
В этом случае заказ вызывает службу пользователя. Поэтому вам необходимо добавить в файл application.yml службы заказа следующее:
feign:
sentinel:
enabled: true # Включить поддержку Feign для Sentinel
Второе: логика понижения версии при сбое записи.
После сбоя в бизнесе вы не можете напрямую сообщить об ошибке, но должны вернуть пользователю понятное приглашение или результат по умолчанию. Это логика понижения версии при сбое.
Записать логику перехода на более раннюю версию после сбоя для FeignClient
①Метод 1: FallbackClass, неспособный обрабатывать исключения в удаленных вызовах.
②Метод 2: FallbackFactory, который может обрабатывать исключения в удаленных вызовах, мы выбираем этот
Здесь мы демонстрируем обработку отказа при понижении версии метода 2.
Третье: используйте UserClientFallbackFactory в интерфейсе UserClient в проекте Feed-api.
Четвертое: добавьте в класс запуска следующее:
Перезапустите службу, после чего появится сообщение об ошибке.
В интернет-запросе говорится, что порядок загрузки bean-компонентов неправильный. Все ок после модификации. Как показано ниже:
Брат Кай тоже не может этого сделать.
Также сообщается, что соответствующий сервер добавляет аннотацию @Lazy, позволяющую отложить загрузку. Как показано ниже:
Нет ли решения?
Давайте сначала посмотрим на версию сервиса Kaige:
Версия Spring Boot: 2.3.8.RELEASE.
Версия Spring Cloud: Hoxton.SR10.
Версия Spring Cloud для Alibaba: 2.2.5.RELEASE
Spring Cloud Gateway:2.2.5.RELEASE
пойдемspringОфициальный сайтhttps://spring.io/projects/spring-cloud Найди весну cloud Переписка версии Хокстона:
Найдите соответствующие зависимости Hoxton.SR10 для каждой версии:
Мы видим, что хотя Hoxton.SR10 не влияет на пружину bootПоддержка2.2.x<spring boot<2.3.x
Брат Кай использует Spring Boot версии 2.3.5, которая соответствует текущим требованиям SR10. НО версия, поддерживаемая GateWay SR10, — 2.2.7.RELEASE. Но версия GateWay, используемая Братом Каем, — 2.2.5.RELEASE. Версия не совпадает. Пуф. (Из рта вытекает старая кровь~~~)
Затем перейдите на официальный сайт Spring и убедитесь, что GateWay 2.2.5 поддерживается. Обнаружил, что SR8 поддерживается. Как показано ниже:
Решительно попытайтесь изменить это.
После обновления зависимостей maven перезапустите службу. ОК вместе.
Краткое содержание:
Чтобы узнать версию Spring Cloud и соответствующую версию других компонентов, таких как Spring Boot\GateWay, лучше всего обратиться к официальному сайту. В противном случае вы будете как брат Кай, потеряв час или два. ε=(´ο`*))) Увы