Spring Boot OpenFeign 整合 okHttpClient

前言

    SpringCloud微服务之间数据传输一般使用​​ OpenFeign​​,简单又易用。ta默认状态下使用 JDK 自带的 HttpURLconnection,这种没有连接池的。就意味着每发起一个请求,都会创建一个新连接,并且不会对最大连接数加以限制(操作系统的限制,实际上能够创建的连接数量是有限的) 。这种略显野蛮的方式可能会威胁到系统的稳定。所以必须使用池化技术啦。

默认客户端 HttpURLConnection

代码在 package feign 下的 Client 接口类中 , 类中 Default 静态内部类,此类使用jdk提供的客户端实现真正的网络调用.

依赖

Gradle

implementation 'io.github.openfeign:feign-okhttp'

Maven 

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-okhttp</artifactId>
</dependency>

配置池化Config

OkHttpClient 这里要导入okhttp3 的依赖,不要使用Feign提供的包装类. 不要导错.

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();
    }
}
# 超时设置  
方法含义

当前值  

connectTimeout建立连接的最大等待时间5 秒
readTimeout从服务器读取响应的最大等待时间5 秒
writeTimeout发送请求的最大等待时间5 秒
# 池化设置
maxIdleConnections最大空闲连接数250
keepAliveDuration空闲连接最大存活时间1
timeUnit时间单位分钟
⚠️ 注意点:
关于空闲连接设置除非你有非常高的并发需求,否则 50 - 100 之间即可.默认OkHttp 的连接池默认最大空闲连接数为 5,存活时间是 1 分钟

Yml 配置

feign:
  okhttp:
    enabled: true

一开始配置成这样,就是不生效.原来是不符合 FeignAutoConfiguration类中 okHttpClient 要求的装配条件.

feign:
  client:
    config:
      default:
        http-method: okhttp

测试 

你的 OkHttpClient 已就绪!

结语

    池化技术一直是作为提升系统性能有力的手段,连接池、线程池、对象池等等。ta有其锋利得地方,但是也不是万无一失的。既然是池,资源是有限的!有耗尽用完时!有等待分配时!会有等不到报错时!资源闲置回收时!问题就不单单是网络调用请求的事情。所以结合自身业务如何设置调用参数,就无比重要。更要提高报错分析问题的能力,要理解池子的概念。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倒流时光三十年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值