'Springcloud Gateway網關入門實戰(二)'

Java 技術 老顧聊技術 2019-09-16
"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 項目依賴
  3. 配置
  4. 代碼實現
  5. 路由規則
  6. 總結

前言

前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。

Gateway網關路由有兩種配置方式:

1、在配置文件yml中配置

2、代碼中注入RouteLocator的Bean

這兩種方式是等價的,建議使用yml配置方式

項目依賴

我們採用最新的版本

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 項目依賴
  3. 配置
  4. 代碼實現
  5. 路由規則
  6. 總結

前言

前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。

Gateway網關路由有兩種配置方式:

1、在配置文件yml中配置

2、代碼中注入RouteLocator的Bean

這兩種方式是等價的,建議使用yml配置方式

項目依賴

我們採用最新的版本

Springcloud Gateway網關入門實戰(二)

因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux

注:什麼是webflux,老顧以後介紹

配置

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 項目依賴
  3. 配置
  4. 代碼實現
  5. 路由規則
  6. 總結

前言

前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。

Gateway網關路由有兩種配置方式:

1、在配置文件yml中配置

2、代碼中注入RouteLocator的Bean

這兩種方式是等價的,建議使用yml配置方式

項目依賴

我們採用最新的版本

Springcloud Gateway網關入門實戰(二)

因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux

注:什麼是webflux,老顧以後介紹

配置

Springcloud Gateway網關入門實戰(二)

屬性含義如下

id:我們自定義的路由 ID,保持唯一

uri:目標服務地址

predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)

請求效果

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 項目依賴
  3. 配置
  4. 代碼實現
  5. 路由規則
  6. 總結

前言

前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。

Gateway網關路由有兩種配置方式:

1、在配置文件yml中配置

2、代碼中注入RouteLocator的Bean

這兩種方式是等價的,建議使用yml配置方式

項目依賴

我們採用最新的版本

Springcloud Gateway網關入門實戰(二)

因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux

注:什麼是webflux,老顧以後介紹

配置

Springcloud Gateway網關入門實戰(二)

屬性含義如下

id:我們自定義的路由 ID,保持唯一

uri:目標服務地址

predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)

請求效果

Springcloud Gateway網關入門實戰(二)

上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get

代碼實現

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 項目依賴
  3. 配置
  4. 代碼實現
  5. 路由規則
  6. 總結

前言

前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。

Gateway網關路由有兩種配置方式:

1、在配置文件yml中配置

2、代碼中注入RouteLocator的Bean

這兩種方式是等價的,建議使用yml配置方式

項目依賴

我們採用最新的版本

Springcloud Gateway網關入門實戰(二)

因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux

注:什麼是webflux,老顧以後介紹

配置

Springcloud Gateway網關入門實戰(二)

屬性含義如下

id:我們自定義的路由 ID,保持唯一

uri:目標服務地址

predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)

請求效果

Springcloud Gateway網關入門實戰(二)

上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get

代碼實現

Springcloud Gateway網關入門實戰(二)

效果和配置方式是一樣的。

上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則

路由規則

Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 項目依賴
  3. 配置
  4. 代碼實現
  5. 路由規則
  6. 總結

前言

前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。

Gateway網關路由有兩種配置方式:

1、在配置文件yml中配置

2、代碼中注入RouteLocator的Bean

這兩種方式是等價的,建議使用yml配置方式

項目依賴

我們採用最新的版本

Springcloud Gateway網關入門實戰(二)

因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux

注:什麼是webflux,老顧以後介紹

配置

Springcloud Gateway網關入門實戰(二)

屬性含義如下

id:我們自定義的路由 ID,保持唯一

uri:目標服務地址

predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)

請求效果

Springcloud Gateway網關入門實戰(二)

上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get

代碼實現

Springcloud Gateway網關入門實戰(二)

效果和配置方式是一樣的。

上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則

路由規則

Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。

Springcloud Gateway網關入門實戰(二)

在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用

Predicate 介紹

Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 項目依賴
  3. 配置
  4. 代碼實現
  5. 路由規則
  6. 總結

前言

前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。

Gateway網關路由有兩種配置方式:

1、在配置文件yml中配置

2、代碼中注入RouteLocator的Bean

這兩種方式是等價的,建議使用yml配置方式

項目依賴

我們採用最新的版本

Springcloud Gateway網關入門實戰(二)

因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux

注:什麼是webflux,老顧以後介紹

配置

Springcloud Gateway網關入門實戰(二)

屬性含義如下

id:我們自定義的路由 ID,保持唯一

uri:目標服務地址

predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)

請求效果

Springcloud Gateway網關入門實戰(二)

上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get

代碼實現

Springcloud Gateway網關入門實戰(二)

效果和配置方式是一樣的。

上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則

路由規則

Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。

Springcloud Gateway網關入門實戰(二)

在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用

Predicate 介紹

Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。

Springcloud Gateway網關入門實戰(二)

在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由

網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 項目依賴
  3. 配置
  4. 代碼實現
  5. 路由規則
  6. 總結

前言

前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。

Gateway網關路由有兩種配置方式:

1、在配置文件yml中配置

2、代碼中注入RouteLocator的Bean

這兩種方式是等價的,建議使用yml配置方式

項目依賴

我們採用最新的版本

Springcloud Gateway網關入門實戰(二)

因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux

注:什麼是webflux,老顧以後介紹

配置

Springcloud Gateway網關入門實戰(二)

屬性含義如下

id:我們自定義的路由 ID,保持唯一

uri:目標服務地址

predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)

請求效果

Springcloud Gateway網關入門實戰(二)

上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get

代碼實現

Springcloud Gateway網關入門實戰(二)

效果和配置方式是一樣的。

上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則

路由規則

Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。

Springcloud Gateway網關入門實戰(二)

在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用

Predicate 介紹

Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。

Springcloud Gateway網關入門實戰(二)

在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由

網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。

Springcloud Gateway網關入門實戰(二)

上圖中,很清晰的說明了各個工廠的規則,說到底Predicate就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理。

時間匹配

Gateway支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之後進行轉發。比如我們現在設置只有在2019年9月10日才會路由轉發,在這之前不進行轉發,我就可以這樣配置:

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 項目依賴
  3. 配置
  4. 代碼實現
  5. 路由規則
  6. 總結

前言

前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。

Gateway網關路由有兩種配置方式:

1、在配置文件yml中配置

2、代碼中注入RouteLocator的Bean

這兩種方式是等價的,建議使用yml配置方式

項目依賴

我們採用最新的版本

Springcloud Gateway網關入門實戰(二)

因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux

注:什麼是webflux,老顧以後介紹

配置

Springcloud Gateway網關入門實戰(二)

屬性含義如下

id:我們自定義的路由 ID,保持唯一

uri:目標服務地址

predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)

請求效果

Springcloud Gateway網關入門實戰(二)

上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get

代碼實現

Springcloud Gateway網關入門實戰(二)

效果和配置方式是一樣的。

上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則

路由規則

Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。

Springcloud Gateway網關入門實戰(二)

在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用

Predicate 介紹

Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。

Springcloud Gateway網關入門實戰(二)

在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由

網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。

Springcloud Gateway網關入門實戰(二)

上圖中,很清晰的說明了各個工廠的規則,說到底Predicate就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理。

時間匹配

Gateway支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之後進行轉發。比如我們現在設置只有在2019年9月10日才會路由轉發,在這之前不進行轉發,我就可以這樣配置:

Springcloud Gateway網關入門實戰(二)

上面的配置After屬性,設置時間,代表在這時間之後才能匹配;我們設置的是2019-9-10,這裡的時間通過ZonedDateTime來對時間進行的對比,ZonedDateTime 是 Java 8 中日期時間功能裡,用於表示帶時區的日期與時間信息的類,ZonedDateTime 支持通過時區來設置時間,中國的時區是:Asia/Shanghai。

上面的示例是指,請求路徑為/get,且請求時間在 2019年9月10日0點0分0秒之後的所有請求都轉發到地址http://httpbin.org:80。+08:00是指時間和UTC時間相差八個小時,時間地區為Asia/Shanghai。

添加完路由規則之後,如果當地時間為9月4日訪問地址http://localhost:8080/get不會轉發,如果是9月10日會自動轉發到http://httpbin.org:80/get

Before Route Predicate 剛好相反,在某個時間之前的請求都進行轉發。

我們把上面路由規則中的 After 改為 Before,如下:

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 項目依賴
  3. 配置
  4. 代碼實現
  5. 路由規則
  6. 總結

前言

前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。

Gateway網關路由有兩種配置方式:

1、在配置文件yml中配置

2、代碼中注入RouteLocator的Bean

這兩種方式是等價的,建議使用yml配置方式

項目依賴

我們採用最新的版本

Springcloud Gateway網關入門實戰(二)

因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux

注:什麼是webflux,老顧以後介紹

配置

Springcloud Gateway網關入門實戰(二)

屬性含義如下

id:我們自定義的路由 ID,保持唯一

uri:目標服務地址

predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)

請求效果

Springcloud Gateway網關入門實戰(二)

上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get

代碼實現

Springcloud Gateway網關入門實戰(二)

效果和配置方式是一樣的。

上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則

路由規則

Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。

Springcloud Gateway網關入門實戰(二)

在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用

Predicate 介紹

Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。

Springcloud Gateway網關入門實戰(二)

在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由

網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。

Springcloud Gateway網關入門實戰(二)

上圖中,很清晰的說明了各個工廠的規則,說到底Predicate就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理。

時間匹配

Gateway支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之後進行轉發。比如我們現在設置只有在2019年9月10日才會路由轉發,在這之前不進行轉發,我就可以這樣配置:

Springcloud Gateway網關入門實戰(二)

上面的配置After屬性,設置時間,代表在這時間之後才能匹配;我們設置的是2019-9-10,這裡的時間通過ZonedDateTime來對時間進行的對比,ZonedDateTime 是 Java 8 中日期時間功能裡,用於表示帶時區的日期與時間信息的類,ZonedDateTime 支持通過時區來設置時間,中國的時區是:Asia/Shanghai。

上面的示例是指,請求路徑為/get,且請求時間在 2019年9月10日0點0分0秒之後的所有請求都轉發到地址http://httpbin.org:80。+08:00是指時間和UTC時間相差八個小時,時間地區為Asia/Shanghai。

添加完路由規則之後,如果當地時間為9月4日訪問地址http://localhost:8080/get不會轉發,如果是9月10日會自動轉發到http://httpbin.org:80/get

Before Route Predicate 剛好相反,在某個時間之前的請求都進行轉發。

我們把上面路由規則中的 After 改為 Before,如下:

Springcloud Gateway網關入門實戰(二)

就表示在這個時間之前可以進行路由,在這時間之後停止路由

有了時間前與時間後,當然就會有時間之間Between,如下:

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 項目依賴
  3. 配置
  4. 代碼實現
  5. 路由規則
  6. 總結

前言

前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。

Gateway網關路由有兩種配置方式:

1、在配置文件yml中配置

2、代碼中注入RouteLocator的Bean

這兩種方式是等價的,建議使用yml配置方式

項目依賴

我們採用最新的版本

Springcloud Gateway網關入門實戰(二)

因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux

注:什麼是webflux,老顧以後介紹

配置

Springcloud Gateway網關入門實戰(二)

屬性含義如下

id:我們自定義的路由 ID,保持唯一

uri:目標服務地址

predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)

請求效果

Springcloud Gateway網關入門實戰(二)

上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get

代碼實現

Springcloud Gateway網關入門實戰(二)

效果和配置方式是一樣的。

上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則

路由規則

Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。

Springcloud Gateway網關入門實戰(二)

在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用

Predicate 介紹

Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。

Springcloud Gateway網關入門實戰(二)

在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由

網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。

Springcloud Gateway網關入門實戰(二)

上圖中,很清晰的說明了各個工廠的規則,說到底Predicate就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理。

時間匹配

Gateway支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之後進行轉發。比如我們現在設置只有在2019年9月10日才會路由轉發,在這之前不進行轉發,我就可以這樣配置:

Springcloud Gateway網關入門實戰(二)

上面的配置After屬性,設置時間,代表在這時間之後才能匹配;我們設置的是2019-9-10,這裡的時間通過ZonedDateTime來對時間進行的對比,ZonedDateTime 是 Java 8 中日期時間功能裡,用於表示帶時區的日期與時間信息的類,ZonedDateTime 支持通過時區來設置時間,中國的時區是:Asia/Shanghai。

上面的示例是指,請求路徑為/get,且請求時間在 2019年9月10日0點0分0秒之後的所有請求都轉發到地址http://httpbin.org:80。+08:00是指時間和UTC時間相差八個小時,時間地區為Asia/Shanghai。

添加完路由規則之後,如果當地時間為9月4日訪問地址http://localhost:8080/get不會轉發,如果是9月10日會自動轉發到http://httpbin.org:80/get

Before Route Predicate 剛好相反,在某個時間之前的請求都進行轉發。

我們把上面路由規則中的 After 改為 Before,如下:

Springcloud Gateway網關入門實戰(二)

就表示在這個時間之前可以進行路由,在這時間之後停止路由

有了時間前與時間後,當然就會有時間之間Between,如下:

Springcloud Gateway網關入門實戰(二)

意思一看就能看出,在兩時間之間即可路由,不在不可路由。

Cookie 匹配

Cookie Route Predicate 可以接收兩個參數,一個是 Cookie name ,一個是正則表達式,路由規則會通過獲取對應的 Cookie name 值和正則表達式去匹配,如果匹配上就會執行路由,如果沒有匹配上則不執行

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 項目依賴
  3. 配置
  4. 代碼實現
  5. 路由規則
  6. 總結

前言

前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。

Gateway網關路由有兩種配置方式:

1、在配置文件yml中配置

2、代碼中注入RouteLocator的Bean

這兩種方式是等價的,建議使用yml配置方式

項目依賴

我們採用最新的版本

Springcloud Gateway網關入門實戰(二)

因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux

注:什麼是webflux,老顧以後介紹

配置

Springcloud Gateway網關入門實戰(二)

屬性含義如下

id:我們自定義的路由 ID,保持唯一

uri:目標服務地址

predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)

請求效果

Springcloud Gateway網關入門實戰(二)

上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get

代碼實現

Springcloud Gateway網關入門實戰(二)

效果和配置方式是一樣的。

上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則

路由規則

Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。

Springcloud Gateway網關入門實戰(二)

在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用

Predicate 介紹

Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。

Springcloud Gateway網關入門實戰(二)

在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由

網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。

Springcloud Gateway網關入門實戰(二)

上圖中,很清晰的說明了各個工廠的規則,說到底Predicate就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理。

時間匹配

Gateway支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之後進行轉發。比如我們現在設置只有在2019年9月10日才會路由轉發,在這之前不進行轉發,我就可以這樣配置:

Springcloud Gateway網關入門實戰(二)

上面的配置After屬性,設置時間,代表在這時間之後才能匹配;我們設置的是2019-9-10,這裡的時間通過ZonedDateTime來對時間進行的對比,ZonedDateTime 是 Java 8 中日期時間功能裡,用於表示帶時區的日期與時間信息的類,ZonedDateTime 支持通過時區來設置時間,中國的時區是:Asia/Shanghai。

上面的示例是指,請求路徑為/get,且請求時間在 2019年9月10日0點0分0秒之後的所有請求都轉發到地址http://httpbin.org:80。+08:00是指時間和UTC時間相差八個小時,時間地區為Asia/Shanghai。

添加完路由規則之後,如果當地時間為9月4日訪問地址http://localhost:8080/get不會轉發,如果是9月10日會自動轉發到http://httpbin.org:80/get

Before Route Predicate 剛好相反,在某個時間之前的請求都進行轉發。

我們把上面路由規則中的 After 改為 Before,如下:

Springcloud Gateway網關入門實戰(二)

就表示在這個時間之前可以進行路由,在這時間之後停止路由

有了時間前與時間後,當然就會有時間之間Between,如下:

Springcloud Gateway網關入門實戰(二)

意思一看就能看出,在兩時間之間即可路由,不在不可路由。

Cookie 匹配

Cookie Route Predicate 可以接收兩個參數,一個是 Cookie name ,一個是正則表達式,路由規則會通過獲取對應的 Cookie name 值和正則表達式去匹配,如果匹配上就會執行路由,如果沒有匹配上則不執行

Springcloud Gateway網關入門實戰(二)

不帶cookies訪問

curl http://localhost:8080/get //不帶cookies

返回404

{"timestamp":"2019-09-04T09:28:45.726+0000","path":"/get","status":404,"error":"Not Found","message":null}

帶上cookies訪問,且userId為1

curl http://localhost:8080/get --cookie "userId=1"

返回正常

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 項目依賴
  3. 配置
  4. 代碼實現
  5. 路由規則
  6. 總結

前言

前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。

Gateway網關路由有兩種配置方式:

1、在配置文件yml中配置

2、代碼中注入RouteLocator的Bean

這兩種方式是等價的,建議使用yml配置方式

項目依賴

我們採用最新的版本

Springcloud Gateway網關入門實戰(二)

因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux

注:什麼是webflux,老顧以後介紹

配置

Springcloud Gateway網關入門實戰(二)

屬性含義如下

id:我們自定義的路由 ID,保持唯一

uri:目標服務地址

predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)

請求效果

Springcloud Gateway網關入門實戰(二)

上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get

代碼實現

Springcloud Gateway網關入門實戰(二)

效果和配置方式是一樣的。

上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則

路由規則

Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。

Springcloud Gateway網關入門實戰(二)

在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用

Predicate 介紹

Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。

Springcloud Gateway網關入門實戰(二)

在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由

網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。

Springcloud Gateway網關入門實戰(二)

上圖中,很清晰的說明了各個工廠的規則,說到底Predicate就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理。

時間匹配

Gateway支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之後進行轉發。比如我們現在設置只有在2019年9月10日才會路由轉發,在這之前不進行轉發,我就可以這樣配置:

Springcloud Gateway網關入門實戰(二)

上面的配置After屬性,設置時間,代表在這時間之後才能匹配;我們設置的是2019-9-10,這裡的時間通過ZonedDateTime來對時間進行的對比,ZonedDateTime 是 Java 8 中日期時間功能裡,用於表示帶時區的日期與時間信息的類,ZonedDateTime 支持通過時區來設置時間,中國的時區是:Asia/Shanghai。

上面的示例是指,請求路徑為/get,且請求時間在 2019年9月10日0點0分0秒之後的所有請求都轉發到地址http://httpbin.org:80。+08:00是指時間和UTC時間相差八個小時,時間地區為Asia/Shanghai。

添加完路由規則之後,如果當地時間為9月4日訪問地址http://localhost:8080/get不會轉發,如果是9月10日會自動轉發到http://httpbin.org:80/get

Before Route Predicate 剛好相反,在某個時間之前的請求都進行轉發。

我們把上面路由規則中的 After 改為 Before,如下:

Springcloud Gateway網關入門實戰(二)

就表示在這個時間之前可以進行路由,在這時間之後停止路由

有了時間前與時間後,當然就會有時間之間Between,如下:

Springcloud Gateway網關入門實戰(二)

意思一看就能看出,在兩時間之間即可路由,不在不可路由。

Cookie 匹配

Cookie Route Predicate 可以接收兩個參數,一個是 Cookie name ,一個是正則表達式,路由規則會通過獲取對應的 Cookie name 值和正則表達式去匹配,如果匹配上就會執行路由,如果沒有匹配上則不執行

Springcloud Gateway網關入門實戰(二)

不帶cookies訪問

curl http://localhost:8080/get //不帶cookies

返回404

{"timestamp":"2019-09-04T09:28:45.726+0000","path":"/get","status":404,"error":"Not Found","message":null}

帶上cookies訪問,且userId為1

curl http://localhost:8080/get --cookie "userId=1"

返回正常

Springcloud Gateway網關入門實戰(二)

Header 匹配

Header Predicate 和 Cookie Predicate 一樣,也是接收 2 個參數,一個 header 中屬性名稱和一個正則表達式,這個屬性值和正則表達式匹配則執行

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 項目依賴
  3. 配置
  4. 代碼實現
  5. 路由規則
  6. 總結

前言

前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。

Gateway網關路由有兩種配置方式:

1、在配置文件yml中配置

2、代碼中注入RouteLocator的Bean

這兩種方式是等價的,建議使用yml配置方式

項目依賴

我們採用最新的版本

Springcloud Gateway網關入門實戰(二)

因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux

注:什麼是webflux,老顧以後介紹

配置

Springcloud Gateway網關入門實戰(二)

屬性含義如下

id:我們自定義的路由 ID,保持唯一

uri:目標服務地址

predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)

請求效果

Springcloud Gateway網關入門實戰(二)

上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get

代碼實現

Springcloud Gateway網關入門實戰(二)

效果和配置方式是一樣的。

上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則

路由規則

Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。

Springcloud Gateway網關入門實戰(二)

在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用

Predicate 介紹

Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。

Springcloud Gateway網關入門實戰(二)

在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由

網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。

Springcloud Gateway網關入門實戰(二)

上圖中,很清晰的說明了各個工廠的規則,說到底Predicate就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理。

時間匹配

Gateway支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之後進行轉發。比如我們現在設置只有在2019年9月10日才會路由轉發,在這之前不進行轉發,我就可以這樣配置:

Springcloud Gateway網關入門實戰(二)

上面的配置After屬性,設置時間,代表在這時間之後才能匹配;我們設置的是2019-9-10,這裡的時間通過ZonedDateTime來對時間進行的對比,ZonedDateTime 是 Java 8 中日期時間功能裡,用於表示帶時區的日期與時間信息的類,ZonedDateTime 支持通過時區來設置時間,中國的時區是:Asia/Shanghai。

上面的示例是指,請求路徑為/get,且請求時間在 2019年9月10日0點0分0秒之後的所有請求都轉發到地址http://httpbin.org:80。+08:00是指時間和UTC時間相差八個小時,時間地區為Asia/Shanghai。

添加完路由規則之後,如果當地時間為9月4日訪問地址http://localhost:8080/get不會轉發,如果是9月10日會自動轉發到http://httpbin.org:80/get

Before Route Predicate 剛好相反,在某個時間之前的請求都進行轉發。

我們把上面路由規則中的 After 改為 Before,如下:

Springcloud Gateway網關入門實戰(二)

就表示在這個時間之前可以進行路由,在這時間之後停止路由

有了時間前與時間後,當然就會有時間之間Between,如下:

Springcloud Gateway網關入門實戰(二)

意思一看就能看出,在兩時間之間即可路由,不在不可路由。

Cookie 匹配

Cookie Route Predicate 可以接收兩個參數,一個是 Cookie name ,一個是正則表達式,路由規則會通過獲取對應的 Cookie name 值和正則表達式去匹配,如果匹配上就會執行路由,如果沒有匹配上則不執行

Springcloud Gateway網關入門實戰(二)

不帶cookies訪問

curl http://localhost:8080/get //不帶cookies

返回404

{"timestamp":"2019-09-04T09:28:45.726+0000","path":"/get","status":404,"error":"Not Found","message":null}

帶上cookies訪問,且userId為1

curl http://localhost:8080/get --cookie "userId=1"

返回正常

Springcloud Gateway網關入門實戰(二)

Header 匹配

Header Predicate 和 Cookie Predicate 一樣,也是接收 2 個參數,一個 header 中屬性名稱和一個正則表達式,這個屬性值和正則表達式匹配則執行

Springcloud Gateway網關入門實戰(二)

上面的意思,就是請求頭要有token屬性,並且值為整數的正則表達式

curl http://localhost:8080/get -H "token:12" 

返回正常,將參數-H "token:12"改為-H "token:hello"再次執行時返回404證明沒有匹配。

下面老顧就介紹快點,因為比較簡單,一通百通

Host 匹配

Host Route Predicate 接收一組參數,一組匹配的域名列表,這個模板是一個 ant 分隔的模板,用.號作為分隔符。它通過參數中的主機地址作為匹配規則。

predicates:
- Host=**.toutiao.com

請求匹配上的

curl http://localhost:8080/get -H "Host: www.toutiao.com" 
curl http://localhost:8080/get -H "Host: md.toutiao.com"

請求方式匹配

通過請求的方式是 POST、GET、PUT、DELETE 等進行路由。

predicates:
- Method=GET //或者POST,PUT

請求路徑匹配

Path Route Predicate 接收一個匹配路徑的參數來判斷是否走路由。

predicates:
- Path=/get/{segment}

如果請求路徑符合要求,則此路由將匹配,例如:/get/1 或者 /get/bar。

請求參數匹配

Query Route Predicate 支持傳入兩個參數,一個是屬性名,一個為屬性值,屬性值可以是正則表達式。

predicates:
- Query=token

只有屬性名token,表示只要有token參數就行,不管值為多少,即可路由

predicates:
- Query=token, \\d+

表示不但要有參數名token,值還要是整數才能路由

請求 ip 地址匹配

通過設置某個 ip 區間號段的請求才會路由,RemoteAddr Route Predicate 接受 cidr 符號(IPv4 或 IPv6 )字符串的列表(最小大小為1),例如 192.168.0.1/16 (其中 192.168.0.1 是 IP 地址,16 是子網掩碼)。

predicates:
- RemoteAddr=192.168.1.1/24

如果請求的遠程地址是 192.168.1.10,則此路由將匹配。

組合使用

predicates:
- Host=**.toutiao.com
- Path=/get
- Method=GET
- Query=token
- After=2019-01-20T06:06:06+08:00[Asia/Shanghai]

各種 Predicates 同時存在於同一個路由時,請求必須同時滿足所有的條件才被這個路由匹配

總結

老顧今天主要聊了Gateway的基礎路由規則,當然我們也可以自定義predicates。下一篇我們就進入高級篇,主要介紹Gateway的filter、熔斷以及限流等


---End---

最近老顧上傳了微服務網關的分享課程,請大家多多支持

推薦閱讀

1、Gateway網關係列開篇:SpringCloud的官方網關Gateway介紹

2、API網關在微服務架構中的應用,這一篇就夠了

3、學習Lambda表達式看這篇就夠了,不會讓你失望的哦(續篇)

4、Lambda用在哪裡?幾種場景?

5、為什麼會出現Lambda表達式,你知道嗎?

6、不說“分佈式事務”理論,直接上大廠阿里的解決方案,絕對實用

7、女程序員問到這個問題,讓我思考了半天,Mysql的“三高”架構

8、大廠二面:CAP原則為什麼只能滿足其中兩項?而不能同時滿足

9、阿里P7二面:聊聊零拷貝的原理

10、秒殺系統的核心點都在這裡,快來取

11、你瞭解如何利用token方式實現分佈式Session嗎?

12、Mysql索引結構演變,為什麼最終會是那個結構呢?讓你一看就懂

13、一場比賽涉及到的知識,用通俗易通的方式介紹併發協調

14、企業實戰Redis全方面思考,你思考了嗎?

15、面試題:Thread的start和run的區別

16、面試題:什麼是CAS?CAS的作用以及缺點

17、如何訪問redis中的海量數據?避免事故產生

18、如何解決Redis熱點問題?以及如何發現熱點?

19、如何設計API接口,實現統一格式返回?

20、你真的知道在生產環境下如何部署tomcat嗎?

21、分享一線互聯網大廠分佈式唯一ID設計 之 snowflake方案

22、分享大廠分佈式唯一ID設計方案,快來圍觀

23、你想了解一線大廠的分佈式唯一ID生成方案嗎?

24、你知道如何處理大數據量嗎?(數據拆分篇)

25、如何永不遷移數據和避免熱點? 根據服務器指標分配數據量(揭祕篇)

26、你知道怎麼分庫分表嗎?如何做到永不遷移數據和避免熱點嗎?

27、你瞭解大型網站的頁面靜態化嗎?

28、你知道如何更新緩存嗎?如何保證緩存和數據庫雙寫一致性?

29、你知道怎麼解決DB讀寫分離,導致數據不一致問題嗎?

30、DB讀寫分離情況下,如何解決緩存和數據庫不一致性問題?

31、你真的知道怎麼使用緩存嗎?

32、如何利用鎖,防止緩存擊穿?重構思想的重要性

33、海量訂單產生的業務高峰期,如何避免消息的重複消費?

34、你知道如何保障生產端100%消息投遞成功嗎?

35、微服務下的分佈式session該如何管理?

36、阿里二面:filter、interceptor、aspect應如何選擇?很多人中招

37、互聯網架構重要組員CDN,很多高級開發都沒有實操過,來看這裡

38、阿里二面:CDN緩存控制原理,看看能不能難住你

"

相關推薦

推薦中...