【Spring Cloud】協同開發利器之動態路由

作者:代碼峽谷孫臏

原文:https://blog.csdn.net/m0_64360721/article/details/125597943

介紹

不知道大家有沒有在協同開發的過程中遇到這樣的問題

好幾個人同時開發同一個服務上的不同模塊,導致你需要調試的接口總是被路由到別人的服務上,非常影響調試的效率,而且人越多越難受,總是請求不到自己的服務

如果只是自測還好,可以直接調用本地服務來避免這個問題,但是如果是和前端聯調,前端又是統一請求的網關地址,那就有點麻煩了

所以我就想能不能在開發調試的時候,讓某個接口路由到指定的服務呢?

於是我就實現了一個庫來解決這個問題

通過可視化頁面來配置接口路徑對應的服務地址

比如我們先把所有的接口都統一路由到開發環境的服務上,然後將需要調試的模塊接口路由到我們本地的服務上(路徑匹配存在優先級,更精確的優先匹配)

這樣我們既可以讓調試的接口路由到我們自己的服務,也可以讓其他的接口不路由到我們的服務,畢竟有的時候其他接口的日誌可能會把我們的日誌刷掉,對調試造成影響

集成

我把這個庫做成零配置的方式,只需要引入相關依賴即可

implementation 'com.github.linyuzai:concept-router-spring-boot-starter:1.0.0'
<dependency>
  <groupId>com.github.linyuzai</groupId>
  <artifactId>concept-router-spring-boot-starter</artifactId>
  <version>1.0.0</version>
</dependency>

Wiki 上可以查看最新的版本

按需求給需要配置的項目添加依賴

集成到網關(可以控制網關的轉發)

集成到服務(可以控制服務間調用)

目前支持的網關是 Gateway,支持的服務間調用是 Feign

主要是這兩個組件感覺大家用的比較多,而像 Zuul 或是 Dubbo 如果有需求的人比較多的話可能會在之後進行補充

對於不同的 Spring Cloud 和 Spring Boot 版本也是有兼容的,所以大家不用擔心版本適配問題

但是不能保證在某些版本中能完全兼容,比如像 2.0.x 和 2.2.x 的 gateway 代碼

public class LoadBalancerClientFilter implements GlobalFilter, Ordered {
    //2.0.x的構造器
    public LoadBalancerClientFilter(LoadBalancerClient loadBalancer) {
        this.loadBalancer = loadBalancer;
    }
}
public class LoadBalancerClientFilter implements GlobalFilter, Ordered {
   //2.2.x的構造器
   public LoadBalancerClientFilter(LoadBalancerClient loadBalancer,
         LoadBalancerProperties properties) {
      this.loadBalancer = loadBalancer;
      this.properties = properties;
   }
}

不同版本間的一些代碼差異可能會導致一些問題,因爲低版本的 LoadBalancerClientFilter 真的是一個方法寫到頭,一點機會都不給只能重寫覆蓋了,不過其他的場景一般還是留了接口讓我能夠自定義插入一些邏輯的

目前經過測試的是 2.0.x,2.2.x,2.6.x,如果大家在集成之後出現報錯或是不生效的情況,可以聯繫我並提供 Spring Cloud 和 Spring Boot 版本就行了

配置

雖說可以零配置,不過也提供了一些配置可用於自定義

concept:
  router:
    enabled: true #是否啓用路由功能
    logger:
      enabled: true #是否啓用路由日誌功能
    banner:
      enabled: true #是否輸出Banner
    repository:
      type: local #路由數據存儲類型,內存/本地文件
      local:
        path: /concept/router #本地文件的存儲位置
    management:
      enabled: true #是否啓用可視化頁面

如果是線上環境的話大家可以通過 concept.router.enabled=false 來關閉功能,或者直接不把依賴打包進去

使用

當我們在項目中集成之後就可以通過 {服務地址}/concept-router/index.html 來訪問可視化頁面了,這裏注意如果做了權限的話記得把 / concept-router/** 加入白名單

添加

路由有這幾個參數

JhvZNF

快捷修改

提供了在列表上雙擊(匹配服務,匹配路徑,服務地址)進行快速修改的功能

這個是我寫前端耗時最久的功能了,你們看看我爲了你們的用戶體驗真是煞費苦心啊(暗示一鍵三連,不是。。。搞串了)

是否生效

那麼怎麼判斷路由配置是否生效呢

在 Gateway 轉發或 Feign 調用時輸出 Router >> 前綴的日誌就說明路由生效了

結束

今天的內容就是這些啦,如果大家現在就有遇到類似的問題或者感興趣的話可以試一下哦,也可以看看其他的庫

開源庫地址:https://github.com/Linyuzai/concept/wiki/Concept-Router

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/L2_oZd9CrwoJDmsqlaB2Ew