#java #spring-boot #spring-cloud #hystrix
#java #весенняя загрузка #spring-cloud #hystrix
Вопрос:
Я начал использовать spring boot 1.4.1 и spring cloud Camden.ОТПУСТИТЕ.
Я создал два простых класса контроллеров REST вместе с их интерфейсами. Я разместил аннотацию @HystrixCommand для одного API первого класса контроллера и интерфейса. Я также добавил метод резервного копирования в тот же класс контроллера и интерфейс. Компиляция кода проходит нормально, и служба тоже загружается нормально. Но я вижу, что API-интерфейсы REST первого класса контроллера REST не загружены / не сопоставлены, что означает, что вызов этих API-интерфейсов REST возвращает 404. У меня был 2-й контроллер REST без какой-либо @HystrixCommand, и API, принадлежащий этому классу, загружается нормально.
Если я просто закомментирую ‘implements <имя интерфейса >’ в первом классе контроллера REST, все начнет работать.
Каково решение?
Некоторый фиктивный фрагмент кода, помогающий понять проблему —
public interface FirstRESTController {
@RequestMapping(value = "/aa", method = RequestMethod.GET)
ResponseEntity<String> getAA();
@HystrixCommand(fallbackMethod = "reliable")
@RequestMapping(value = "/bb", method = RequestMethod.GET)
ResponseEntity<String> getBB();
public ResponseEntity<String> reliable();
}
@RestController
class FirstRESTControllerImpl implements FirstRESTController {
@RequestMapping(value = "/aa", method = RequestMethod.GET)
ResponseEntity<String> getAA() { ... }
@HystrixCommand(fallbackMethod = "reliable")
@RequestMapping(value = "/bb", method = RequestMethod.GET)
ResponseEntity<String> getBB() { ... }
public ResponseEntity<String> reliable() { ... }
}
---------------------------------------------------------------------
public interface SecondRESTController {
@RequestMapping(value = "/cc", method = RequestMethod.GET)
ResponseEntity<String> getCC();
}
@RestController
class SecondRESTControllerImpl implements SecondRESTController {
@RequestMapping(value = "/cc", method = RequestMethod.GET)
ResponseEntity<String> getCC() { ... }
}
Комментарии:
1. Почему вы аннотируете методы в интерфейсах? Не забудьте аннотировать классы с
@RestController
помощью .
Ответ №1:
Это известная проблема. @HystrixCommand
Включение контроллеров с резервным вариантом не работает. Переместите работу в другой компонент с аннотацией hystrix.