предисловие
Эта статья является просто записью решения BUG, сделанной автором, источник проблемы, с которой сталкивается каждый человек, может быть разным, и эталонное значение невелико.
описание проблемы
Когда я сегодня изучал вызов службы feign, я начал весеннюю загрузку после настройки, и результат сообщил об ошибке.Содержимое ошибки показало, что метод getPaymentById не может быть найден.O(U_U)O, давайте посмотрим на сначала содержание проекта
Анализ проекта
Feign, естественно, будет использоваться в клиенте, вызов службы Cloud-Payment-Service, конфигурации файлов POM и YML не вызовет проблем, это понятно.
С файлом запуска проблем нет, аннотация @EnableFeignClients используется для активации Feign, а @EnableEurekaClient — для активации регистрации службы Eureka и обнаружения службы.
Затем есть уровень контроллера, который называется здесьgetPaymentById
метод, ошибка говорит, что не может быть найден, как это не может быть найдено, он скоро будет на сервисном слое?
На уровне службы @FeignClient указывает, что используется служба CLOUD-PAYMENT-SERVICE, в частности эти службы на портах 8001, 8002 и 8004. Функция Feign эквивалентна Ribbon+RestTemplate, которая реализует балансировку нагрузки и вызовы службы. непосредственно указывается аннотациями интерфейса. Вызываемая служба и конкретный метод
Глядя на код уровня контроллера службы cloud-provider-payment8001, вы можете обнаружить, что URL-адрес метода getPaymentById — /payment/get/{id} вместо /get/{id}, поэтому этот метод не будет найден. в Feign вызывает 404 NOT FOUND
@RestController
@RequestMapping("/payment")
public class PaymentController {
...
@GetMapping("/get/{id}")
public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id) {
Payment payment = IPaymentService.getPaymentById(id);
...
проблема решена
В этом случае вам нужно только изменить уровень службы, который изначально использовал Feign.
Протестируйте его и успешно верните данные YEAH!