2021升級版微服務教程7-OpenFeign實戰開發和參數調優
- 2021 年 1 月 18 日
- 筆記
2021升級版SpringCloud教程從入門到實戰精通「H版&alibaba&鏈路追蹤&日誌&事務&鎖」

教程全目錄「含影片」://gitee.com/bingqilinpeishenme/Java-Wiki

OpenFeign實戰開發和參數調優
OpenFeign基本使用
OpenFeign簡介
OpenFeign
是一個聲明式的http客戶端,讓編寫web服務客戶端變的非常容易,只需要創建一個介面並在介面上添加註解即可,OpenFeign的前身是Feign,後者目前已經停更了,OpenFeign是SpringCloud在Feign的基礎上支援了Spring MVC的註解,並通過動態代理的方式產生實現類來做負載均衡並進行調用其他服務。
Ribbon+RestTemplate過於繁瑣,通過OpenFeign可以簡化開發
基本使用
以用戶服務調用商品為例
用戶服務配置 OpenFeign
-
導入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency> -
啟動類上加註解
1594003407081
在商品服務中寫被調用介面(無參介面測試)

在用戶服務中 直接使用Feign寫服務調用
-
創建一個普通的Java介面
image-20210106164841421 -
通過註解聲明當前介面為 Feign的客戶端
image-20210106164857772 -
在Feign介面中 寫服務調用的方法
image-20210106170626537 -
在用戶服務的Controller中使用Feign介面
image-20210106170650566 -
啟動所有服務 兩個商品服務 一個用戶服務 註冊中心 訪問用戶服務觀察服務調用
訪問用戶服務的Controller 可以看到負載均衡的效果
image-20210106170751469 image-20210106170805767 -
流程
1594004633229
關於傳遞參數的處理
參數傳遞都是json 實際上是RestFul的請求
-
/{} 拼接參數
-
被調用介面示例【商品服務】
image-20210106171156012 -
Feign介面示例【用戶服務】
image-20210106171220466
-
-
?拼接參數 對應常見請求類型Get請求
-
被調用介面示例【商品服務】
image-20210106171304020 -
Feign介面示例【用戶服務】
image-20210106171415861
-
-
請求體傳遞參數 對應常見請求Post請求
-
被調用介面示例【商品服務】
image-20210106171535072 -
Feign介面示例【用戶服務】
image-20210106171644918
-
開啟日誌
Feign 和 RestTemplate 不一樣 ,對請求細節封裝的更加徹底,不管是請求還是請求的參數,還是響應的狀態都看不到,想要看到請求的細節需要通過Feign的日誌
Feign日誌的配置
1.配置類 @Bean

@Bean
public Logger.Level feignConfig(){
return Logger.Level.FULL;
}
2.在配置文件中開啟Feign介面所在包的日誌

通過以上配置 重啟項目 再次使用Feign服務調用 就會看到如下日誌:


Feign參數調優
1. 替換OKHttp
在默認情況下 spring cloud feign在進行各個子服務之間的調用時,http組件使用的是jdk的HttpURLConnection,沒有使用執行緒池。
有2種可選的執行緒池:HttpClient和OKHttp,比較推薦OKHttp,請求封裝的非常簡單易用,性能也很ok。
添加依賴
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>
修改配置文件
feign:
okhttp:
enabled: true
httpclient:
enabled: false
max-connections: 1000
max-connections-per-route: 100
max-connections:最大連接數
max-connections-per-route:每個url的連接數
2. 開啟Feign請求響應壓縮
開啟壓縮可以有效節約網路資源,但是會增加CPU壓力,建議把最小壓縮的文檔大小適度調大一點
## 開啟Feign請求響應壓縮
feign.compression.request.enabled=true
feign.compression.response.enabled=true
## 配置壓縮文檔類型及最小壓縮的文檔大小
feign.compression.request.mime-types=text/xml,application/xml,application/json
feign.compression.request.min-request-size=2048
如果你覺得這篇內容對你挺有有幫助的話:
-
點贊支援下吧,讓更多的人也能看到這篇內容(收藏不點贊,都是耍流氓 -_-)
-
歡迎在留言區與我分享你的想法,也歡迎你在留言區記錄你的思考過程。
-
覺得不錯的話,也可以關注 編程鹿 的個人公眾號看更多文章和講解影片(感謝大家的鼓勵與支援🌹🌹🌹)
