http 連接池能提升性能
http 的背景原理
a. 兩臺服務器建立 http 連接的過程是很復雜的一個過程,涉及到多個數據包的交換,并且也很耗時間。
b. Http 連接需要的 3 次握手 4 次分手開銷很大,這一開銷對于大量的比較小的 http 消息來說更大。
優化解決方案
a. 如果我們直接采用 http 連接池,節約了大量的 3 次握手 4 次分手;這樣能大大提升吞吐率。
b. feign 的 http 客戶端支持 3 種框架;HttpURLConnection、httpclient、okhttp;默認是HttpURLConnection。
c. 傳統的 HttpURLConnection 是 JDK 自帶的,并不支持連接池,如果要實現連接池的機制,還需要自己來管理連接對象。對于網絡請求這種底層相對復雜的操作,如果有可用的其他方案,也沒有必要自己去管理連接對象。
d. HttpClient 相比傳統 JDK 自帶的 HttpURLConnection,它封裝了訪問 http 的請求頭,參數,內容體,響應等等;它不僅使客戶端發送 HTTP 請求變得容易,而且也方便了開發人員測試接口(基于 Http 協議的),即提高了開發的效率,也方便提高代碼的健壯性;另外高并發大量的請求網絡的時候,還是用“連接池”提升吞吐量。
案例實現
1.添加相關的依賴
添加httpClient的依賴,同時添加Feign對HttpClient的支持
?
1.修改配置文件
在配置文件中開啟feign對httpClient的設置。
注意:如果使用 HttpClient 作為 Feign 的客戶端工具。那么在定義接口上的注解是需要注意,如果傳遞的是一個自定義的對象(對象會使用 json 格式來專遞)。需要制定類型。
consumes=MediaType.APPLICATION_JSON_VALUE)
?
例子: