SpringBoot?OpenFeign整合okHttpClient實(shí)踐
前言
SpringCloud微服務(wù)之間數(shù)據(jù)傳輸一般使用?? OpenFeign??,簡(jiǎn)單又易用。ta默認(rèn)狀態(tài)下使用 JDK 自帶的 HttpURLconnection,這種沒(méi)有連接池的。
就意味著每發(fā)起一個(gè)請(qǐng)求,都會(huì)創(chuàng)建一個(gè)新連接,并且不會(huì)對(duì)最大連接數(shù)加以限制(操作系統(tǒng)的限制,實(shí)際上能夠創(chuàng)建的連接數(shù)量是有限的。)
這種略顯野蠻的方式可能會(huì)威脅到系統(tǒng)的穩(wěn)定。所以必須使用池化技術(shù)啦。
默認(rèn)客戶端 HttpURLConnection
代碼在 package feign 下的 Client 接口類中 , 類中 Default 靜態(tài)內(nèi)部類,此類使用jdk提供的客戶端實(shí)現(xiàn)真正的網(wǎng)絡(luò)調(diào)用.
依賴
- Gradle
implementation 'io.github.openfeign:feign-okhttp'
- Maven
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>配置池化Config
OkHttpClient 這里要導(dǎo)入okhttp3 的依賴,不要使用Feign提供的包裝類. 不要導(dǎo)錯(cuò).
package io.github.diehao;
import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.TimeUnit;
@Configuration
public class FeignConfig {
@Bean
public OkHttpClient feignClient() {
return new OkHttpClient.Builder()
.connectTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS)
.writeTimeout(5, TimeUnit.SECONDS)
.connectionPool(new ConnectionPool(250, 1, TimeUnit.MINUTES))
.build();
}
}| # 超時(shí)設(shè)置 | ||
| 方法 | 含義 | 當(dāng)前值 |
| connectTimeout | 建立連接的最大等待時(shí)間 | 5 秒 |
| readTimeout | 從服務(wù)器讀取響應(yīng)的最大等待時(shí)間 | 5 秒 |
| writeTimeout | 發(fā)送請(qǐng)求的最大等待時(shí)間 | 5 秒 |
| # 池化設(shè)置 | ||
| maxIdleConnections | 最大空閑連接數(shù) | 250 |
| keepAliveDuration | 空閑連接最大存活時(shí)間 | 1 |
| timeUnit | 時(shí)間單位 | 分鐘 |
| ?? 注意點(diǎn): 關(guān)于空閑連接設(shè)置除非你有非常高的并發(fā)需求,否則 50 - 100 之間即可.默認(rèn)OkHttp 的連接池默認(rèn)最大空閑連接數(shù)為 5,存活時(shí)間是 1 分鐘 | ||
Yml 配置
feign:
okhttp:
enabled: true一開(kāi)始配置成這樣,就是不生效.原來(lái)是不符合 FeignAutoConfiguration類中 okHttpClient 要求的裝配條件.
feign:
client:
config:
default:
http-method: okhttp
測(cè)試
你的 OkHttpClient 已就緒!

總結(jié)
池化技術(shù)一直是作為提升系統(tǒng)性能有力的手段,連接池、線程池、對(duì)象池等等。ta有其鋒利得地方,但是也不是萬(wàn)無(wú)一失的。
既然是池,資源是有限的!有耗盡用完時(shí)!有等待分配時(shí)!會(huì)有等不到報(bào)錯(cuò)時(shí)!資源閑置回收時(shí)!問(wèn)題就不單單是網(wǎng)絡(luò)調(diào)用請(qǐng)求的事情。
所以結(jié)合自身業(yè)務(wù)如何設(shè)置調(diào)用參數(shù),就無(wú)比重要。更要提高報(bào)錯(cuò)分析問(wèn)題的能力,要理解池子的概念。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringBoot項(xiàng)目整合OpenFeign啟動(dòng)失敗及運(yùn)行時(shí)常見(jiàn)錯(cuò)誤解決方案
- SpringBoot整合OpenFeign的完整指南
- Springboot集成OpenFeign Demo詳解
- springboot中如何使用openfeign進(jìn)行接口調(diào)用
- SpringBoot + openFeign實(shí)現(xiàn)遠(yuǎn)程接口調(diào)用的過(guò)程
- springBoot使用openfeign來(lái)遠(yuǎn)程調(diào)用的實(shí)現(xiàn)
- 使用SpringBoot項(xiàng)目導(dǎo)入openfeign版本的問(wèn)題
相關(guān)文章
Java SpringBoot安全框架整合Spring Security詳解
這篇文章主要介紹了Spring Boot整合Spring Security的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2021-09-09
解決Spring boot整合mybatis,xml資源文件放置及路徑配置問(wèn)題
這篇文章主要介紹了解決Spring boot整合mybatis,xml資源文件放置及路徑配置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
Springboot actuator生產(chǎn)就緒功能實(shí)現(xiàn)解析
這篇文章主要介紹了Springboot actuator生產(chǎn)就緒功能實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
解決問(wèn)題:Failed to execute goal org.apache.m
這篇文章主要給大家介紹了關(guān)于解決問(wèn)題:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources的相關(guān)資料,文中將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
Java 普通代碼塊靜態(tài)代碼塊執(zhí)行順序(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇Java 普通代碼塊靜態(tài)代碼塊執(zhí)行順序(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
java實(shí)現(xiàn)文件上傳下載和圖片壓縮代碼示例
本文給大家介紹的是項(xiàng)目中經(jīng)常需要用到的一個(gè)常用的功能,使用java實(shí)現(xiàn)文件的上傳下載和圖片的壓縮功能,這里推薦給大家,有需要的小伙伴參考下。2015-03-03

