Feign
Feign解決什么:
- Feign旨在使編寫JAVA HTTP客戶端變得更加容易,Feign簡化了RestTemplate代碼,實現了Ribbon負載均衡,使代碼變得更加簡潔,也少了客戶端調用的代碼,使用Feign實現負載均衡是首選方案,只需要你創建一個接口,然后在上面添加注解即可。
- Feign是聲明式服務謂用組件,其核心就是:像調用本地方法一樣調用遠程方法,無感知遠程HTTP請求。
ribbon和Feign的選擇:
- Feign代碼可讀性,可維護性比Ribbon+RestTemplate好。可以統一編碼風格
- Feign的性能雖然不那么優秀,但是項目瓶頸一般不在HTTP客戶端,而在自身業務處理上
- 如果Feign無法實現的時候,用RestTemplate,靈活性上后者更高
使用:引入依賴spring-cloud-starter-feign,啟動類添加@EnableFeignClients注解開啟Feign的功能,定義一個feign接口,通過@FeignClient(“服務名”),來指定調用哪個服務,在Controller層,調用接口暴露服務
自定義Feign配置類:
- 接口上的@FeignClient注解中,配置configuration屬性為配置類
- 定義配置類,創建一個Logger的bean,自定義日志級別
源碼實現:
- 首先通過@EnableFeignClients注解開啟FeignClient,根據Feign的規則實現接口,并加@FeignClient注解
- 掃描所有@FeignClient注解的類,并將這些信息注入到ioc容器中
- 當接口的方法被調用,通過jdk的代理,來生成具體的RequesTemplate
- RequesTemplate再生成Request然后交給HttpClient
- 再將其封裝到LoadBalanceClient類,這個類結合類Ribbon做到了負載均衡。
在Feign中使用降級和熔斷:
降級:在接口中指定fallbackFactory值為降級服務類,在api層建立一個降級服務,用@Component注解,并實現FallbackFactory接口,定義泛型為feign調用的接口。
熔斷:啟動類加@EnableCircuitBreaker開啟熔斷,在方法上加@HystrixCommand注解,配置circuiBreaker屬性,開啟熔斷器,并設置請求閾值,錯誤占比,休眠時間等,配置fallback指定熔斷方法
Feign的性能優化:
gzip壓縮:
gzip是一種數據格式,采用deflate算法壓縮數據,gzip壓縮純文本文件時,大約可以減少70%以上文件大小。
作用:網絡數據經過壓縮后實際降低了網絡傳輸的字節數,可以加快網頁加載速度,節省流量,改善用戶體驗。此外gzip與搜索引擎的抓取工具有更好的關系,列入google可以通過直接抓取gzip文件來比普通手工抓取更快的檢索網頁
開啟配置在代碼consumer中
HTT協議關于壓縮傳輸的規定:
- 客戶端向服務器請求中帶有:Accept-Encoding:gzip,deflate字段,向服務器表示春戶端支持的壓縮格式(gzip或者deflate),如果不發送該消息頭,服務端默認是不會壓縮的。
- 服務端在收到請求之后,如果發現請求頭中含有Accept-Encoding字段,并且支持該類型壓縮,就會對響應報文壓縮之后返回給客戶端,并且攜帶Content-Encoding:gzip消息頭,表示響應報文是根據該格式進行壓縮的
- 客戶端接收到請求之后,先判斷是否有Content-Encoding消息頭,如果有,按該榨式解壓報文,否則按正常報文處理
HTTP連接池:采用連接池可以節約大量3次握手和4次揮手,大大提升吞吐量
- feign的http客戶端支持3種框架HttpURLConnection(默認)、HttpClient、okHttp
- 傳統的HttpuRL.Connection是JDK自帶的,并不支持連接池,如果要實現連接池的機制,還需要自己來管理連接對象。對于網絡請求這種底層相對復雜的操作,如果有可用的其他方案,沒有必要自己去管理連接對象。
- Httpclient相比傳統JDK自帶的HttpURLConnection,它封裝了訪問HTTP的請求頭,參數,內容體,響應等等;它不僅使客戶端發送HTTP請求變得容易,而且也方便了開發人員測試接口(基于HTTP協議的) ,既提高了開發的效率,又提高了代碼的健壯性;另外高井發大星的詩求網絡的時候,也是用"連接池"提升吞吐量。HttpClient開啟配置代碼在consumer中
請求超時:
feign負載均衡底層是ribbon,所以請求超時配置就是配置ribbon,默認超時時間1s。請求超時配置在consumer中
在Feign中使用降級和熔斷:
降級:在接口中指定fallbackFactory值為降級服務類,在api層建立一個降級服務,用@Component注解,并實現FallbackFactory接口,定義泛型為feign調用的接口。
熔斷:啟動類加@EnableCircuitBreaker開啟熔斷,在方法上加@HystrixCommand注解,配置circuiBreaker屬性,開啟熔斷器,并設置請求閾值,錯誤占比,休眠時間等,配置fallback指定熔斷方法
本文來自博客園,作者:難得,轉載請注明原文鏈接:http://www.rzrgm.cn/zhangbLearn/p/18829368

浙公網安備 33010602011771號