首頁 > 軟體

解決Springboot中Feignclient呼叫時版本問題

2022-03-01 10:00:49

現有Springboot專案三個,分別為jpmc-adapter, gsdic-api, twpre-api。gsdic-api, twpre-api是公共的服務,對外提供Restful的API,通過feign client去呼叫。

大的背景就是

jpmc-adapter現在需要呼叫另外兩個公共的服務。

Springboot版本:

  • jpmc-adapter           1.5.9
  • gsdic-api                   1.5.9
  • twpre-api                  2.0.5

可以看到jpmc-adaper和gsdic-api的Springboot版本是一致的。如果jpmc-adaper通過feign client單單呼叫 gsdic-api,一切都OK!

現在的情況是:jpmc-adaper既需要呼叫 gsdic-api,又需要呼叫twpre-api,然後啟動專案的時候就報錯了

錯誤如下

這是Springboot版本不一致導致的問題

先看jpmc-adaper中是如何去呼叫另外兩個服務的。

大致如下:

1. build.gradle中引入另外兩個公共服務的jar包。

2. gradle.properties中統一管理依賴版本號,如下:

3. 啟動類中引入公共服務的設定:

4. 測試類中呼叫如下:

其中,twpre-api的FeignClient是來自org.springframework.cloud.openfeign.FeignClient;如下:

而gsdic-api的FeignClient是來自org.springframework.cloud.netflix.feign.FeignClient, 如下:

解決辦法如下

你可以把所以服務的版本換成一致,這樣就能避免此類問題。但是換版本可能會導致很多問題,這裡可以通過如下方式解決:

因為jpmc-adapter和gsdic-api的版本是一致的,那麼我們在呼叫方即jpmc-adapter中重寫twpre-api的FeignClient。

package com.geoswift.jpmc.api; 
import org.springframework.cloud.netflix.feign.FeignClient; 
import com.geoswift.twpre.fapi.TwpreRestAPI; 
@FeignClient(name="twpre", path="/api/twpre/v1")
public interface MyTwpreRestAPI extends TwpreRestAPI {	
}

然後在測試的時候使用我們重寫後的使用者端就行了,如下:

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com