本期目录
- 前言
- 1. Feign底层的客户端实现
- 2. Feign性能优化思路
- 3. 更换底层客户端
- 1)引入依赖坐标
- 2)配置连接池
前言
- 本次示例代码的文件结构如下图所示。
1. Feign底层的客户端实现
-
Feign 发送 HTTP 请求时,底层会使用到别的客户端。下面列出常用的 3 种 HTTP 客户端。
HTTP客户端 特点 URLConnection
Feign 的默认实现,不支持连接池 Apache HttpClient 支持连接池 OKHttp 支持连接池 -
其中,
URLConnection
是 Feign 默认使用的 HTTP 客户端,是 JDK 自带的,但是性能不太好,而且不支持连接池。连接池可以减小 HTTP 连接创建和销毁所带来的性能损耗,因为 HTTP 每次创建连接时都要 3 次握手,断开连接时都要 4 次挥手,还是十分消耗性能的。
2. Feign性能优化思路
- 使用支持连接池的 HTTP 客户端代替默认的 URLConnection 。
- 日志级别设置为 BASIC 或 NONE 。
3. 更换底层客户端
- 本例以 Apache HttpClient 为例,更换 Feign 底层的客户端,也因为 Apache HttpClient 是 Spring 底层默认的实现方案。
1)引入依赖坐标
- 打开
order-service
的pom.xml
。
<!-- HttpClent替换Feign底层客户端实现 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
2)配置连接池
- 打开
order-service
的application.yml
。
feign:
httpclient:
enabled: true # HttpClient的开关
max-connections: 200 # 最大连接数
max-connections-per-route: 50 # 单个请求路径的最大连接数
- 其中,
max-connections
和max-connections-per-route
需要根据具体业务决定。可以使用 jmeter 压力测试得出一个合适的值。
这样,Feign 就成功更换了支持连接池、性能更好的底层的 HTTP 客户端。