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

  1. 導入依賴

    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-openfeign</artifactId>
      </dependency>
  2. 啟動類上加註解

    1594003407081
    1594003407081

在商品服務中寫被調用介面(無參介面測試)

image-20210106170542955
image-20210106170542955

在用戶服務中 直接使用Feign寫服務調用

  1. 創建一個普通的Java介面

    image-20210106164841421
    image-20210106164841421
  2. 通過註解聲明當前介面為 Feign的客戶端

    image-20210106164857772
    image-20210106164857772
  3. 在Feign介面中 寫服務調用的方法

    image-20210106170626537
    image-20210106170626537
  4. 在用戶服務的Controller中使用Feign介面

    image-20210106170650566
    image-20210106170650566
  5. 啟動所有服務 兩個商品服務 一個用戶服務 註冊中心 訪問用戶服務觀察服務調用

    訪問用戶服務的Controller 可以看到負載均衡的效果

    image-20210106170751469
    image-20210106170751469
    image-20210106170805767
    image-20210106170805767
  6. 流程

    1594004633229
    1594004633229

關於傳遞參數的處理

參數傳遞都是json 實際上是RestFul的請求

  1. /{} 拼接參數

    1. 被調用介面示例【商品服務】

      image-20210106171156012
      image-20210106171156012
    2. Feign介面示例【用戶服務】

      image-20210106171220466
      image-20210106171220466
  2. ?拼接參數 對應常見請求類型Get請求

    1. 被調用介面示例【商品服務】

      image-20210106171304020
      image-20210106171304020
    2. Feign介面示例【用戶服務】

      image-20210106171415861
      image-20210106171415861
  3. 請求體傳遞參數 對應常見請求Post請求

    1. 被調用介面示例【商品服務】

      image-20210106171535072
      image-20210106171535072
    2. Feign介面示例【用戶服務】

      image-20210106171644918
      image-20210106171644918

開啟日誌

Feign 和 RestTemplate 不一樣 ,對請求細節封裝的更加徹底,不管是請求還是請求的參數,還是響應的狀態都看不到,想要看到請求的細節需要通過Feign的日誌

Feign日誌的配置

1.配置類 @Bean

image-20200319112307671
image-20200319112307671
@Bean
public Logger.Level feignConfig(){
    return Logger.Level.FULL;
}

2.在配置文件中開啟Feign介面所在包的日誌

image-20210106172033726
image-20210106172033726

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

image-20200421164205211
image-20200421164205211
image-20200421164257236
image-20200421164257236

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

如果你覺得這篇內容對你挺有有幫助的話:

  1. 點贊支援下吧,讓更多的人也能看到這篇內容(收藏不點贊,都是耍流氓 -_-)

  2. 歡迎在留言區與我分享你的想法,也歡迎你在留言區記錄你的思考過程。

  3. 覺得不錯的話,也可以關注 編程鹿 的個人公眾號看更多文章和講解影片(感謝大家的鼓勵與支援🌹🌹🌹)