天天看點

spring feign

什麼是feign

Feign 的英文表意為“假裝,僞裝,變形”, 是一個http請求調用的輕量級架構,可以以Java接口注解的方式調用Http請求,而不用像Java中通過封裝HTTP請求封包的方式直接調用。Feign通過處理注解,将請求模闆化,當實際調用的時候,傳入參數,根據參數再應用到請求上,進而轉化成真正的請求,這種請求相對而言比較直覺。

Feign解決了什麼問題?

封裝了Http調用流程,更适合面向接口化的程式設計習慣

在服務調用的場景中,我們經常調用基于Http協定的服務,而我們經常使用到的架構可能有HttpURLConnection、Apache HttpComponnets、OkHttp3 、Netty等等,這些架構在基于自身的專注點提供了自身特性。而從角色劃分上來看,他們的職能是一緻的提供Http調用服務。具體流程如下:

spring feign

Feign架構

spring feign

常用參數設定

feign.hystrix.enabled=false feign的調用過程中是否啟用hystrix,預設false feign.httpclient.enabled=ture 是否使用httpclient來調用接口,預設true;要使用httpclient還需要引入feign-httpclient依賴 feign.okhttp.enabled=false 是否使用okhttp來調用接口,預設false;要使用okhttp需把改屬性設為true,還需要引入feign-httpclient依賴

Feign和Ribbon的使用差別

Ribbon和Feign都是用于調用其他服務的,不過方式不同。

1.啟動類使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。

2.服務的指定位置不同,Ribbon是在@RibbonClient注解上聲明,Feign則是在定義抽象方法的接口中使用@FeignClient聲明。

3.調用方式不同,Ribbon需要自己建構http請求,模拟http請求然後使用RestTemplate發送給其他服務,步驟相當繁瑣。

Feign則是在Ribbon的基礎上進行了一次改進,采用接口的方式,将需要調用的其他服務的方法定義成抽象方法即可, 不需要自己建構http請求。不過要注意的是抽象方法的注解、方法簽名要和提供服務的方法完全一緻。

Feign整合了Ribbon和Hystrix

1.Feign調用其他微服務API時可以使用統一的HTTPZ請求模闆,包含請求參數,URL等資訊,便于管理維護。Ribbon的請求通過RestTemplate調用其他微服務API,參數通過字元串拼接在URL後面,不友善寫也不利于管理。

2.Spring Cloud為Feign提供了支援Spring MVC的注解,可以通過注解友善使用。

3.可插拔的注解支援,包括Feign注解和JAX-RS注解。

4.支援可插拔的HTTP編碼器和解碼器。

5.支援HTTP請求和響應的壓縮處理。

6.Feign支援Hystrix和他的回退功能

7.Feign支援Ribbon的負載均衡功能

繼續閱讀