1. 程式人生 > 實用技巧 >spring-cloud-starter-feign匯入失敗

spring-cloud-starter-feign匯入失敗

Feign和Ribbon

Feign 和 Ribbon 是 Spring Cloud 的 Netflix 中提供的兩個實現軟負載均衡的元件,Ribbon 和 Feign 都是用於呼叫其他服務的,方式不同。Ribbon可以在客戶端配置 RibbonServerList(服務端列表),使用 HttpClientRestTemplate 模擬 http 請求,步驟相當繁瑣。Feign 則是在 Ribbon 的基礎上進行了一次改進,採用介面的方式,將需要呼叫的其他服務的方法定義成抽象方法即可,不需要自己構建 http 請求,就像是呼叫自身工程的方法呼叫,而感覺不到是呼叫遠端方法,使得編寫客戶端變得非常容易。。不過要注意的是抽象方法的註解、方法簽名要和提供服務的方法完全一致。

要使用Feign,請建立一個介面並對其進行註釋。它具有可插入註釋支援,包括Feign註釋和JAX-RS註釋。Feign還支援可插拔編碼器和解碼器。Spring Cloud添加了對Spring MVC註釋的支援,並支援使用HttpMessageConvertersSpring Web中預設使用的註釋。Spring Cloud集成了RibbonEureka以及Spring Cloud LoadBalancer,以在使用Feign時提供負載平衡的http客戶端。

Feign能幹什麼

Feign 旨在使編寫 Java HTTP 客戶端變得更加容易。

前面在使用 Ribbon + RestTemplate 時, 利用 RestTemplate 請求的封裝處理,形成了一套模板化的呼叫方法。但是在實際開發中,對於服務依賴的呼叫可能不止一處,往往一個介面會被多處呼叫,所以通常會針對每個微服務自行封裝一些客戶端類來包裝這些服務依賴的呼叫。所以,Feign 在此基礎上除了進一步封裝,由他來幫助我們定義和實現依賴服務介面的定義。在Feign 的實現下,我們只需要建立一個介面,並使用註解的方式來配置它(以前是Dao 介面上main標註 Mapper 註解,現在是一個微服務介面上面標註一個Feign 註解即可),即可完成對一個服務提供方的介面繫結,簡化了使用 Spring cloud Ribbon 時, 自動封裝服務呼叫客戶端。

Feign 集成了 Ribbon

利用 Ribbon 維護了服務方的服務列表資訊,並且通過輪詢實現了客戶端的負載均衡,而 Ribbon 不同的是,通過Feign 只需要定義服務繫結介面且以宣告式的方法,優雅而簡單的實現了服務呼叫。

Feign 與 OpenFeign 的區別

Feign

feign 是 spring cloud 元件中的一個輕量級 RESTful的HTTP 服務客戶端 Reign 內建了 Ribbon, 用來做客戶端服務在均衡,去呼叫服務註冊中心的服務,Feign 的使用方式是:使用Feign 註解自定義介面,呼叫這個介面,就可以低哦啊用服務註冊中心的服務。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>

請注意,用上面這種方法匯入依賴可能或報錯
我開始是按照這種方法匯入的依賴,但是匯入一直失敗,我以為是下載jar的過程中損壞了,在倉庫中刪除jar包之後重新下載還是不行。
後來我發現指定feign的版本號就能匯入成功了,如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
	<version>1.4.7.RELEASE</version>
</dependency>

最新版本是1.4.7。

OpenFeign

openfeign 是 spring cloud 在 feign 的基礎上支援 spring mvc註解 ,如 @RequestMapping 等等,OpenFeign 的@FeignClient 可以解析Spring MVC 的 @RequestMapping註解下的介面,並通過動態代理的方式生產實現類 ,實現類中做負載均衡並且 低耦合呼叫其他服務。
匯入方法:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>