【Spring Cloud】如何把Feign默认的HTTP客户端URLConnection更换成支持连接池的Apache HttpClient或OKHttp




前言

  • 本次示例代码的文件结构如下图所示。
    在这里插入图片描述

1. Feign底层的客户端实现

  • Feign 发送 HTTP 请求时,底层会使用到别的客户端。下面列出常用的 3 种 HTTP 客户端。

    HTTP客户端 特点
    URLConnection Feign 的默认实现,不支持连接池
    Apache HttpClient 支持连接池
    OKHttp 支持连接池
  • 其中,URLConnection 是 Feign 默认使用的 HTTP 客户端,是 JDK 自带的,但是性能不太好,而且不支持连接池。连接池可以减小 HTTP 连接创建和销毁所带来的性能损耗,因为 HTTP 每次创建连接时都要 3 次握手,断开连接时都要 4 次挥手,还是十分消耗性能的。


2. Feign性能优化思路

  1. 使用支持连接池的 HTTP 客户端代替默认的 URLConnection 。
  2. 日志级别设置为 BASIC 或 NONE 。

3. 更换底层客户端

  • 本例以 Apache HttpClient 为例,更换 Feign 底层的客户端,也因为 Apache HttpClient 是 Spring 底层默认的实现方案。

1)引入依赖坐标

  • 打开 order-servicepom.xml
<!-- HttpClent替换Feign底层客户端实现 -->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

2)配置连接池

  • 打开 order-serviceapplication.yml
feign:
  httpclient:
    enabled: true # HttpClient的开关
    max-connections: 200  # 最大连接数
    max-connections-per-route: 50   # 单个请求路径的最大连接数
  • 其中,max-connectionsmax-connections-per-route 需要根据具体业务决定。可以使用 jmeter 压力测试得出一个合适的值。

这样,Feign 就成功更换了支持连接池、性能更好的底层的 HTTP 客户端。

猜你喜欢

转载自blog.csdn.net/Sihang_Xie/article/details/129009766
今日推荐