SpringCloudAlibaba - Feign 的性能调优
前言
记录下Feign
的性能调优方式,在微服务内部调用接口主要有RestTemplate
和Feign
方式来实现,其都是Http
的
-
RestTemplate
在微服务当中与注解@LoadBanlance
注解结合使用, 可以通过服务名进行模块之间的接口调用 -
Feign
默认集成了ribbon
,用它也可以通过服务名进行模块之间的接口调用
RestTemplate 和 Feign
RestTemplate
和Feign
的比较
角度 | RestTemplate | Feign |
---|---|---|
可读性、可维护性 | 一般 | 极佳 |
开发体验 | 欠佳 | 极佳 |
性能 | 很好 | 中等(RestTemplate的50%左右) |
灵活性 | 极佳 | 中等(内置功能可满足大多数需求) |
Feign 的性能调优方式
配置连接池
默认情况下,feign
使用urlconnection
去请求,而urlconnection
是没有连接池的,feign
除了可以使用urlconnection
去发送请求还支持使用apache
的httpclient
以及okhttp
去发送请求
httpclient 连接池配置
pom.xml
<!-- httpclient -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
application.yml
# 自定义配置 feign 日志级别
feign:
httpclient:
# 使用 apache httpclient做请求,而不是默认的 urlconnection
enabled: true
# feign的最大连接数
max-connections: 200
# feign单个路径的最大连接数
max-connections-per-route: 50
okhttp 连接池配置
pom.xml
<!-- okhttp -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
<version>10.1.0</version>
</dependency>
application.yml
feign:
httpclient:
# feign的最大连接数
max-connections: 200
# feign单个路径的最大连接数
max-connections-per-route: 50
okhttp:
# 使用 okhttp 做请求,
enabled: true
- 连接池的配置对性能的提升大概在
15%
左右
设置合适日志级别
feign
的日志级别
级别 | 打印内容 |
---|---|
NONE(默认值) | 不记录任何日志 |
BASIC | 仅记录请求方法、URL、响应状态代码以及执行时间 |
HEADERS | BASIC级别的基础上,记录请求和响应的header |
FULL | 记录请求和响应的header、body和元数据 |
feign
默认不打印任何日志,生产环境建议设置日志级别为BASIC
,仅记录请求方法、URL
、响应状态代码及执行时间