# 7-10 Feign的性能优化
# 导航
# RestTemplate VS Feign
角度 | RestTemplate | Feign |
---|---|---|
可读性、可维护性 | 一般 | 级佳 |
开发体验 | 欠佳 | 级佳 |
性能 | 很好 | 中等(RestTemplate50%左右) |
灵活性 | 级佳 | 中等(内置功能可满足绝大数需求) |
# Feign的性能优化方案
连接池【提升15%左右】 feign默认是使用URLConnection发送请求的,URLConnection是没有连接池的,但是feign的底层除了支持URLConnection发送请求以外,还可以支持Apache HttpClient以及 OKHttp去发送请求,而Apache 的HttpClient以及OKHttp都是支持连接池的
为feign设置合适的日志级别 feign默认是不打印任何日志的,这个性能是最好的,但是在生产环境如想要了解请求的细节,建议将日志级别设置成 BASIC
# 实例1:Feign使用Apache HttpClient的连接池
# 步骤1 加依赖
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
1
2
3
4
2
3
4
# 步骤2:yml写配置
feign.httpclient.enabled=true
feign:
client:
config:
# 想要调用的微服务的名称
default:
loggerLevel: full
httpclient:
# 让feign使用apache httpclien做请求,而不是默认的urlconnection
enabled: true
# feign最大连接数
max-connections: 200
# feign的单个路径的最大连接数
max-connections-per-route: 50
# 这两个值如何做到最优:可以设置大一点的值,然后做压测
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 实例2:Feign使用OKHttp HttpClient的连接池
# 步骤1:加依赖
<!--feign-okhttp这里需要自己指定版本 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
<version>11.0</version>
</dependency>
1
2
3
4
5
6
2
3
4
5
6
# 步骤2:写配置
feign:
okhttp:
enabled: true
# feign最大连接数
max-connections: 200
# feign的单个路径的最大连接数
max-connections-per-route: 50
# 这两个值如何做到最优:可以设置大一点的值,然后做压测
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# Feign的常见问题
# 7-15现有架构总结
使用Nacos 实现了 服务注册与发现,使用Ribbon实现了负载均衡,使用Feign调用提示了幸福感,但是现在的架构还是有很多问题,例如:雪崩效应、断路器等等