前言
記錄下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、響應狀態代碼及執行時間
