当前位置: 代码网 > it编程>编程语言>Java > SpringBoot OpenFeign整合okHttpClient实践

SpringBoot OpenFeign整合okHttpClient实践

2026年04月20日 Java 我要评论
前言springcloud微服务之间数据传输一般使用​​ openfeign​​,简单又易用。ta默认状态下使用 jdk 自带的 httpurlconnection,这种没有连接池的。就意味着每发起一

前言

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有其锋利得地方,但是也不是万无一失的。

既然是池,资源是有限的!有耗尽用完时!有等待分配时!会有等不到报错时!资源闲置回收时!问题就不单单是网络调用请求的事情。

所以结合自身业务如何设置调用参数,就无比重要。更要提高报错分析问题的能力,要理解池子的概念。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com