SpringCloud使用Feign服務通訊踩的坑
阿新 • • 發佈:2020-08-23
fallback熔斷器實現了Feign客戶端的所有方法,當網路不通或者訪問失敗時,會自動呼叫fallback服務降級類中的方法。
啟動專案時報錯了,具體的報錯資訊如下:
Caused by: java.lang.IllegalStateException: No fallback instance of type class com.xxx.xxx.feign.fallback.RemoteUserFallback found for feign client xxx
報錯內容明顯是沒找到RemoteUserFallBack這個類
1、檢查配置檔案
feign: hystrix: enabled:true # 開啟Feign的熔斷功能 預設是關閉的
2、啟動類上需要@EnableFeignClients註解
@EnableFeignClients(basePackages = {"com.xxx.包名"}) //開啟Feign並掃描Feign客戶端
3、Feign客戶端類上使用@FeignClient,通過fallback屬性來指明對應熔斷器的類名
@FeignClient(value = "服務名", fallback = RemoteUserFallback.class,) //聲明當前類是一個Feign客戶端,並指定請求的服務名
4、fallback熔斷器類上需要加註解@Component,確保可以被spring掃描
我報錯的原因就是出現在第四步這裡,儘管我加了@component註解。SpringBoot在啟動的時候 會掃描main類所在包及其子包進行Bean的例項化,但是fallback熔斷器類並不在我啟動類的子類下面,我這裡是通過引入其模組來呼叫這裡面的方法。
所以最後我在啟動類上加了@ComponentScan註解:
@ComponentScan(basePackages = {"com.xxx"})
OK,成功啟動並訪問成功。