基於spring cloud多個消費端重復定義feign client的問題
springcloud多個消費端重復定義feign client
spring cloud消費端調用服務提供者,有兩種方式rest+ribbon和Feign,Feign是一個聲明式的偽Http客戶端更為簡單易用,所以我們項目選用Feign作為服務通訊方式
項目有6個模塊,A,B,C,D,E,F,模塊之前必不可少的會存在相互調用的情況
問題來瞭。通過FeignClient的方式調用服務端,需要在消費端建立對服務端的調用的FeignClient接口
- 假如A和B都需要調用C。
- A調用C需要在A模塊中建立一個C的FeignClient接口
- B調用C也需要在B模塊建立一個C的FeignClient接口
- 如果D、E、F都需要用到C模塊,那麼還需要建立3個FeignClient。而這些FeignClient裡面的代碼都是一樣的。
既然這樣那FeignClient接口能不能定義為一個通用的接口呢。
作者嘗試將FeignClient單獨建立瞭一個模塊G,將對各個模塊的FeignClient調用接口集中在模塊G中管理,A,B,C,D,E,F模塊互調時,隻需要在pom中引入G模塊即可。
想法很美好,現實很殘酷,實驗結果失敗瞭。
引入模塊G後,啟動SpringBoot,控制報錯。找不到bean。
消費端啟動類Application加瞭掃描包註解@ComponentScan(basePackages={“com.chelizi.feign.intf”})
***************************
APPLICATION FAILED TO START
***************************Description:
A component required a bean of type ‘com.chelizi.feign.intf.system.SysSerialNumberController’ that could not be found.
Action:
Consider defining a bean of type ‘com.chelizi.feign.intf.system.SysSerialNumberController’ in your configuration.
加瞭上面的@ComponentScan註解後,com.chelizi.feign.intf下的普通@Component或者@Service的JavaBean是可以被掃描到的,但是@FeignClient的類沒法掃描到
在spring cloud+feignClient報錯
在spring cloud+feignClient中出現Consider defining a bean of type ‘xxxx’ in your configuration 錯誤
大部分主要原因是沒有啟用
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 剖析SpringCloud Feign中所隱藏的坑
- 解決@FeignClient註入service失敗問題
- feign 打印日志不顯示的問題及解決
- 基於FeignClient調用超時的處理方案
- SpringCloud微服務基礎簡介