(三十三) 跟我學習SpringCloud-Spring Cloud Zuul路由配置詳解

在教程《Zuul網關介紹和使用》中,我們學習瞭如何結合 Eureka 來實現動態的路由轉發。當 Zuul 集成 Eureka 之後,其實就可以爲 Eureka 中所有的服務進行路由操作了,默認的轉發規則就是“API 網關地址+訪問的服務名稱+接口 URI”。

在給服務指定名稱的時候,應儘量短一點,這樣的話我們就可以用默認的路由規則進行請求,不需要爲每個服務都定一個路由規則,這樣就算新增了服務,API 網關也不用修改和重啓了。

默認規則舉例:

  • API 網關地址:http://localhost:2103。
  • 用戶服務名稱:user-service。
  • 用戶登錄接口:/user/login。

那麼通過 Zuul 訪問登錄接口的規則就是 http://localhost:2103/user-service/user/login

1. 指定具體服務路由

我們可以爲每一個服務都配置一個路由轉發規則:

zuul.routes.fsh-house.path=/api-house/**

上述代碼將 fsh-house 服務的路由地址配置成了 api-house,也就是當需要訪問 fsh-house 中的接口時,我們可以通過 api-house/house/hello 來進行。這其實就是將服務名稱變成了我們自定義的名稱。

有的時候服務名稱太長了,放在 URL 中不太友好,我們希望它變得更友好一點,就可以這麼去配置。這裏的 api-house/** 後面一定要配置兩個星號,兩個星號表示可以轉發任意層級的 URL,比如“/api-house/house/1”。如果只配置一個星號,那麼就只能轉發一級,比如“/api-house/house”。

2. 路由前綴

有的時候我們會想在 API 前面配置一個統一的前綴,比如像 http://c.biancheng.net/user/login 這樣登錄接口,如果想將其變成 http://c.biancheng.net/rest/user/login,即在每個接口前面加一個 rest,此時我們就可以通過 Zuul 中的配置來實現:

zuul.prefix=/rest

3. 本地跳轉

Zuul 的 API 路由還提供了本地跳轉功能,通過 forward 就可以實現。

zuul.routes.fsh-substitution.path=/api/**
zuul.routes.fsh-substitution.url=forward:/local

當我們想在訪問 api/1 的時候會路由到本地的 local/1 上去,就可以參照上述代碼實現。local 是本地接口需要我們自行添加,因此我們要建一個 Controller,代碼如下所示。

@RestController
public class LocalController {
    @GetMapping("/local/{id}")
    public String local(@PathVariable String id) {
        return id;
    }
}

然後訪問 http://localhost:2103/api/1 就可以看到我們想要的返回結果了,如圖 1 所示。

給大家推薦分佈式架構源碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章