首頁 > 軟體

@FeignClient的使用和Spring Boot的版本適配方式

2022-03-01 10:00:34

@FeignClient使用和Spring Boot版本適配

公司專案中需要呼叫微服務,公司使用的Spring Boot版本是1.5.X,而現在的都是用的2.X版本以上了。

在FeignClinet、Spring Cloud與Spring Boot的版本問題上跌跤了,現在在這裡記錄下來,希望對大家有用。

首先,先看一下官網給出的

Spring Cloud與Spring Boot版本相容性

Spring CloudSpring Boot
Hoxton2.2.x, 2.3.x (Starting with SR5)
Greenwich2.1.x
Finchley2.0.x
Edgware1.5.x
Dalston1.5.x

並且還有一個值得注意的地方是Spring Cloud對Feign的支援在Finchley版本以下是由spring-cloud-starter-feign包提供的,而之後就是由spring-cloud-starter-openfeign提供的。

根據我的情況,我的Spring Cloud版本選了Edgware(腦子裡浮現出一串數位:7777777),並且feign的依賴應該使用spring-cloud-starter-feign。大家可以根據自己專案情況選擇。

在pom檔案中新增依賴

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Edgware.RELEASE</version>
            <type>pom</type>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
    <version>1.4.7.RELEASE</version>
</dependency>

然後再給大家說一下Feign的使用

@FeignClient(name = "feignClient", url="xxxx")
public interface FeignClient {
    @PostMapping(value = "/query")
    String query(@RequestParam String token);
}
@EnableFeignClients(basePackages = {"xxx"}) // 別忘了在啟動類上加上註解,xxx的值為FeignClient定義所在的包
@Autowired
FeignClient feignClient;
feignClient.query("xxxxxxxxx");

Spring Boot“坑”之@FeignClient註解

在專案開發中難免會遇到一些問題,這次小編又遇到了一個很噁心的問題,由於剛接觸springboot架構,設定和使用上都還比較陌生。

下面來描述一下我遇到的問題

專案是分模組開發,後臺做無狀態,登入和許可權控制在閘道器上做,所有服務都註冊到服務中心上,由閘道器往下分發請求

小編在寫閘道器介面的時候遇到了問題,閘道器介面和後臺介面都寫的沒有問題,但是在整合後,閘道器無法轉發到這個介面上。經過百度許久後無果。

小編開始進行排查,由於在閘道器裡@FeignClient 註解的介面中所有的方法請求地址和閘道器中所請求的地址一樣,然後做出個大膽的推測,是不是這個原因呢??

然後開始試驗,將閘道器請求的路徑稍作修改,和請求後臺的路徑不一致,然後,問題解決!!(到目前為止,不知道原因)

貼上圖片,更容易明白

【錯誤頁】

【閘道器轉發介面】

【後臺請求介面】

【閘道器請求介面】

原因是因為閘道器請求介面名稱和後臺請求介面名稱一樣

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


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