久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Spring Cloud中Zuul路由配置的示例分析

161次閱讀
沒有評論

共計 3449 個字符,預計需要花費 9 分鐘才能閱讀完成。

這篇文章主要為大家展示了“Spring Cloud 中 Zuul 路由配置的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“Spring Cloud 中 Zuul 路由配置的示例分析”這篇文章吧。

Zuul 路由配置

  路由配置看似簡單,但也有部分的規則需要說明,小節以前面搭建的集群項目為基礎,講解 Zuul 的路由配置。

簡單路由

 Spring Cloud 在 Zuul 的“routing”階段實現了幾個過濾器,這些過濾器決定如何進行路由工作。其中,最基本的就是 SimpleHostRoutingFilter,該過濾器運行后,會將 HTTP 請求全部轉發到“源服務”(HTTP 服務),本書將其稱為簡單路由,本章 7.2 小節的例子,實際上就是使用了簡單路由進行請求轉發。以下為簡單路由的配置,同時使用了 path 與 url:

zuul: 
 routes:
 routeTest:
 path: /routeTest/163
 url: http://www.163.com

  以上的配置,訪問“http://localhost:8080/reuteTest/163”,將會跳轉到 163 網站。為了配置簡便,可以省略 path,默認情況下使用 routeId 作為 path,以下的配置省略了 path 配置:

zuul: 
 routes:
 route163:
 url: http://www.163.com

  訪問“http://localhost:8080/route163”,同樣會路由到 163 網站。實際上,要觸發簡單路由,配置的 url 的值,需要以“http:”或者“https:”字符串打頭。以下的配置,不能觸發簡單路由。

zuul: 
 routes:
 noRoute163:
 url: www.163.com

  簡單路由的過濾器 SimpleHostRoutingFilter,使用的是 HttpClient 進行轉發,該過濾器會將 HttpServletRequest 的相關數據(HTTP 方法、參數、請求頭等),轉換為 HttpClient 的請求實例(HttpRequest),再使用 CloseableHttpClient 進行轉發。

  在此過程中,為了保證轉發的性能,使用了 HttpClient 的連接池功能。涉及連接池,就需要對其進行配置。在使用簡單路由時,可以配置以下兩項,修改 HttpClient 連接池的屬性:

zuul.host.maxTotalConnections:目標主機的最大連接數,默認值為 200。配置該項,相當于調用了 PoolingHttpClientConnectionManager 的 setMaxTotal 方法。

zuul.host.maxPerRouteConnections:每個主機的初始連接數,默認值為 20。配置該項,相當于調用了 PoolingHttpClientConnectionManager 的 setDefaultMaxPerRoute 方法。

跳轉路由

  除了簡單路由外,也支持跳轉路由,當外部訪問網關的 A 地址時,會 forward 到 B 地址,處理跳轉路由的過濾器為 SendForwardFilter。接下來進行簡單測試,為網關項目(zuul-gateway)添加一個控制器,請見代碼清單 7 -5。

  代碼清單 7 -5:

 codes\07\03\zuul-gateway\src\main\java\org\crazyit\cloud\web\SourceController.java

@RestController
public class SourceController { @RequestMapping(value =  /source/hello/{name} , method = RequestMethod.GET) 
 public String hello(@PathVariable( name) String name) {
 return  hello   + name;
 }
}

  控制器中提供了一個最簡單的“hello”服務,用來當作“源服務”,在 application.yml 中進行轉發配置,配置項如下:

zuul: 
 routes:
 helloRoute:
 path: /test/**
 url: forward:/source/hello

  當外部訪問“/test”地址時,將會自動 forward 到“/source/hello”地址,打開瀏覽器,輸入:http://localhost:8080/test/anugs,可以看到瀏覽器會返回字符串“hello angus”,可見源服務被調用。跳轉路由實現較為簡單,實際上是調用了 RequestDispatcher 的 forward 方法進行跳轉。

Ribbon 路由

  在 7.3.2 中,我們已經接觸過 Ribbon 路由。當網關作為 Eureka 客戶端,注冊到 Eureka 服務器時,可以通過配置 serviceId,將請求轉發到集群的服務中。使用以下配置,可以執行 Ribbon 路由過濾器:

zuul: 
 routes:
 sale:
 path: /sale/**
 serviceId: zuul-sale-service

  與簡單路由類似,serviceId 也可以被省略,當省略時,將會使用 routeId 作為 serviceId,下面的配置片斷,效果等同于上面的配置:

zuul: 
 routes:
 zuul-sale-service:
 path: /sale/**

  需要注意的是,如果提供的 url 配置項,不是簡單路由格式(不以 http: 或 htpps: 開頭),也不是跳轉路由格式(forward: 開頭),那么將會執行 Ribbon 路由過濾器,將 url 看作是一個 serviceId,下面的配置片斷,效果也等同于前面的配置:

zuul: 
 routes:
 sale:
 path: /sale/**
 url: zuul-sale-service

自定義路由規則

  如果上面的路由配置無法滿足實際的需求,可以考慮使用自定義的路由規則。實現方式較為簡單,在配置類中創建一個 PatternServiceRouteMapper 即可,請見代碼清單 7 -6。

  代碼清單 7 -6:codes\07\03\zuul-gateway\src\main\java\org\crazyit\cloud\MyConfig.java

@Configuration
public class MyConfig {
 @Bean
 public PatternServiceRouteMapper patternServiceRouteMapper() {
 return new PatternServiceRouteMapper(  (zuul)-(? module .+)-(service) ,  ${module}/** 
 }
}

  創建的 PatternServiceRouteMapper 實例,構造器第一個參數為 serviceId 的正則表達式,第二個參數為路由的 path。訪問“module/**”的請求,將會被路由到“zuul-module-service”的微服務。

  更進一步,以上的路由規則,如果想讓一個或多個服務不被路由,可以使用 zuul.ignoredServices 屬性,例如在代碼清單 7 - 6 的基礎上,想排除 zuul-sale-service、zuul-book-service 這兩個模塊,可以配置“zuul.ignoredServices: zuul-sale-service, zuul-book-service”。

忽略路由

  除了上面提到的 zuul.ignoredServices 配置可以忽略路由外,還可以使用 zuul.ignoredPatterns 來設置不進行路由的 URL,請見以下配置片斷:

zuul:
 ignoredPatterns: /sale/noRoute
 routes:
 sale:
 path: /sale/**
 serviceId: zuul-sale-service

  訪問“/sale”路徑的請求,都會被路由到“zuul-sale-service”進行處理,但“/sale/noRoute”除外。

以上是“Spring Cloud 中 Zuul 路由配置的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計3449字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 应城市| 印江| 婺源县| 阿克苏市| 和政县| 平乡县| 临泉县| 屏边| 吉安县| 获嘉县| 易门县| 新疆| 集安市| 绍兴县| 微山县| 濮阳市| 黄浦区| 阿荣旗| 扶沟县| 原平市| 额济纳旗| 漯河市| 磴口县| 龙南县| 吉木萨尔县| 乐山市| 获嘉县| 津市市| 康保县| 芜湖县| 沂源县| 茶陵县| 宜城市| 平原县| 安福县| 启东市| 鲜城| 威信县| 凌云县| 贺州市| 霍林郭勒市|