歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 項目依賴
- 配置
- 代碼實現
- 路由規則
- 總結
前言
前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。
Gateway網關路由有兩種配置方式:
1、在配置文件yml中配置
2、代碼中注入RouteLocator的Bean
這兩種方式是等價的,建議使用yml配置方式
項目依賴
我們採用最新的版本
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 項目依賴
- 配置
- 代碼實現
- 路由規則
- 總結
前言
前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。
Gateway網關路由有兩種配置方式:
1、在配置文件yml中配置
2、代碼中注入RouteLocator的Bean
這兩種方式是等價的,建議使用yml配置方式
項目依賴
我們採用最新的版本
因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux
注:什麼是webflux,老顧以後介紹
配置
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 項目依賴
- 配置
- 代碼實現
- 路由規則
- 總結
前言
前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。
Gateway網關路由有兩種配置方式:
1、在配置文件yml中配置
2、代碼中注入RouteLocator的Bean
這兩種方式是等價的,建議使用yml配置方式
項目依賴
我們採用最新的版本
因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux
注:什麼是webflux,老顧以後介紹
配置
屬性含義如下:
id:我們自定義的路由 ID,保持唯一
uri:目標服務地址
predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)
請求效果
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 項目依賴
- 配置
- 代碼實現
- 路由規則
- 總結
前言
前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。
Gateway網關路由有兩種配置方式:
1、在配置文件yml中配置
2、代碼中注入RouteLocator的Bean
這兩種方式是等價的,建議使用yml配置方式
項目依賴
我們採用最新的版本
因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux
注:什麼是webflux,老顧以後介紹
配置
屬性含義如下:
id:我們自定義的路由 ID,保持唯一
uri:目標服務地址
predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)
請求效果
上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get
代碼實現
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 項目依賴
- 配置
- 代碼實現
- 路由規則
- 總結
前言
前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。
Gateway網關路由有兩種配置方式:
1、在配置文件yml中配置
2、代碼中注入RouteLocator的Bean
這兩種方式是等價的,建議使用yml配置方式
項目依賴
我們採用最新的版本
因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux
注:什麼是webflux,老顧以後介紹
配置
屬性含義如下:
id:我們自定義的路由 ID,保持唯一
uri:目標服務地址
predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)
請求效果
上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get
代碼實現
效果和配置方式是一樣的。
上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則。
路由規則
Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 項目依賴
- 配置
- 代碼實現
- 路由規則
- 總結
前言
前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。
Gateway網關路由有兩種配置方式:
1、在配置文件yml中配置
2、代碼中注入RouteLocator的Bean
這兩種方式是等價的,建議使用yml配置方式
項目依賴
我們採用最新的版本
因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux
注:什麼是webflux,老顧以後介紹
配置
屬性含義如下:
id:我們自定義的路由 ID,保持唯一
uri:目標服務地址
predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)
請求效果
上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get
代碼實現
效果和配置方式是一樣的。
上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則。
路由規則
Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。
在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用。
Predicate 介紹
Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 項目依賴
- 配置
- 代碼實現
- 路由規則
- 總結
前言
前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。
Gateway網關路由有兩種配置方式:
1、在配置文件yml中配置
2、代碼中注入RouteLocator的Bean
這兩種方式是等價的,建議使用yml配置方式
項目依賴
我們採用最新的版本
因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux
注:什麼是webflux,老顧以後介紹
配置
屬性含義如下:
id:我們自定義的路由 ID,保持唯一
uri:目標服務地址
predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)
請求效果
上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get
代碼實現
效果和配置方式是一樣的。
上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則。
路由規則
Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。
在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用。
Predicate 介紹
Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。
在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由。
網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 項目依賴
- 配置
- 代碼實現
- 路由規則
- 總結
前言
前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。
Gateway網關路由有兩種配置方式:
1、在配置文件yml中配置
2、代碼中注入RouteLocator的Bean
這兩種方式是等價的,建議使用yml配置方式
項目依賴
我們採用最新的版本
因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux
注:什麼是webflux,老顧以後介紹
配置
屬性含義如下:
id:我們自定義的路由 ID,保持唯一
uri:目標服務地址
predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)
請求效果
上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get
代碼實現
效果和配置方式是一樣的。
上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則。
路由規則
Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。
在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用。
Predicate 介紹
Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。
在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由。
網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。
上圖中,很清晰的說明了各個工廠的規則,說到底Predicate就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理。
時間匹配
Gateway支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之後進行轉發。比如我們現在設置只有在2019年9月10日才會路由轉發,在這之前不進行轉發,我就可以這樣配置:
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 項目依賴
- 配置
- 代碼實現
- 路由規則
- 總結
前言
前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。
Gateway網關路由有兩種配置方式:
1、在配置文件yml中配置
2、代碼中注入RouteLocator的Bean
這兩種方式是等價的,建議使用yml配置方式
項目依賴
我們採用最新的版本
因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux
注:什麼是webflux,老顧以後介紹
配置
屬性含義如下:
id:我們自定義的路由 ID,保持唯一
uri:目標服務地址
predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)
請求效果
上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get
代碼實現
效果和配置方式是一樣的。
上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則。
路由規則
Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。
在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用。
Predicate 介紹
Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。
在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由。
網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。
上圖中,很清晰的說明了各個工廠的規則,說到底Predicate就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理。
時間匹配
Gateway支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之後進行轉發。比如我們現在設置只有在2019年9月10日才會路由轉發,在這之前不進行轉發,我就可以這樣配置:
上面的配置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,如下:
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 項目依賴
- 配置
- 代碼實現
- 路由規則
- 總結
前言
前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。
Gateway網關路由有兩種配置方式:
1、在配置文件yml中配置
2、代碼中注入RouteLocator的Bean
這兩種方式是等價的,建議使用yml配置方式
項目依賴
我們採用最新的版本
因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux
注:什麼是webflux,老顧以後介紹
配置
屬性含義如下:
id:我們自定義的路由 ID,保持唯一
uri:目標服務地址
predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)
請求效果
上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get
代碼實現
效果和配置方式是一樣的。
上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則。
路由規則
Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。
在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用。
Predicate 介紹
Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。
在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由。
網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。
上圖中,很清晰的說明了各個工廠的規則,說到底Predicate就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理。
時間匹配
Gateway支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之後進行轉發。比如我們現在設置只有在2019年9月10日才會路由轉發,在這之前不進行轉發,我就可以這樣配置:
上面的配置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,如下:
就表示在這個時間之前可以進行路由,在這時間之後停止路由。
有了時間前與時間後,當然就會有時間之間Between,如下:
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 項目依賴
- 配置
- 代碼實現
- 路由規則
- 總結
前言
前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。
Gateway網關路由有兩種配置方式:
1、在配置文件yml中配置
2、代碼中注入RouteLocator的Bean
這兩種方式是等價的,建議使用yml配置方式
項目依賴
我們採用最新的版本
因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux
注:什麼是webflux,老顧以後介紹
配置
屬性含義如下:
id:我們自定義的路由 ID,保持唯一
uri:目標服務地址
predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)
請求效果
上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get
代碼實現
效果和配置方式是一樣的。
上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則。
路由規則
Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。
在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用。
Predicate 介紹
Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。
在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由。
網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。
上圖中,很清晰的說明了各個工廠的規則,說到底Predicate就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理。
時間匹配
Gateway支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之後進行轉發。比如我們現在設置只有在2019年9月10日才會路由轉發,在這之前不進行轉發,我就可以這樣配置:
上面的配置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,如下:
就表示在這個時間之前可以進行路由,在這時間之後停止路由。
有了時間前與時間後,當然就會有時間之間Between,如下:
意思一看就能看出,在兩時間之間即可路由,不在不可路由。
Cookie 匹配
Cookie Route Predicate 可以接收兩個參數,一個是 Cookie name ,一個是正則表達式,路由規則會通過獲取對應的 Cookie name 值和正則表達式去匹配,如果匹配上就會執行路由,如果沒有匹配上則不執行。
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 項目依賴
- 配置
- 代碼實現
- 路由規則
- 總結
前言
前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。
Gateway網關路由有兩種配置方式:
1、在配置文件yml中配置
2、代碼中注入RouteLocator的Bean
這兩種方式是等價的,建議使用yml配置方式
項目依賴
我們採用最新的版本
因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux
注:什麼是webflux,老顧以後介紹
配置
屬性含義如下:
id:我們自定義的路由 ID,保持唯一
uri:目標服務地址
predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)
請求效果
上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get
代碼實現
效果和配置方式是一樣的。
上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則。
路由規則
Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。
在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用。
Predicate 介紹
Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。
在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由。
網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。
上圖中,很清晰的說明了各個工廠的規則,說到底Predicate就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理。
時間匹配
Gateway支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之後進行轉發。比如我們現在設置只有在2019年9月10日才會路由轉發,在這之前不進行轉發,我就可以這樣配置:
上面的配置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,如下:
就表示在這個時間之前可以進行路由,在這時間之後停止路由。
有了時間前與時間後,當然就會有時間之間Between,如下:
意思一看就能看出,在兩時間之間即可路由,不在不可路由。
Cookie 匹配
Cookie Route Predicate 可以接收兩個參數,一個是 Cookie name ,一個是正則表達式,路由規則會通過獲取對應的 Cookie name 值和正則表達式去匹配,如果匹配上就會執行路由,如果沒有匹配上則不執行。
不帶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"
返回正常
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 項目依賴
- 配置
- 代碼實現
- 路由規則
- 總結
前言
前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。
Gateway網關路由有兩種配置方式:
1、在配置文件yml中配置
2、代碼中注入RouteLocator的Bean
這兩種方式是等價的,建議使用yml配置方式
項目依賴
我們採用最新的版本
因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux
注:什麼是webflux,老顧以後介紹
配置
屬性含義如下:
id:我們自定義的路由 ID,保持唯一
uri:目標服務地址
predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)
請求效果
上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get
代碼實現
效果和配置方式是一樣的。
上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則。
路由規則
Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。
在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用。
Predicate 介紹
Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。
在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由。
網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。
上圖中,很清晰的說明了各個工廠的規則,說到底Predicate就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理。
時間匹配
Gateway支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之後進行轉發。比如我們現在設置只有在2019年9月10日才會路由轉發,在這之前不進行轉發,我就可以這樣配置:
上面的配置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,如下:
就表示在這個時間之前可以進行路由,在這時間之後停止路由。
有了時間前與時間後,當然就會有時間之間Between,如下:
意思一看就能看出,在兩時間之間即可路由,不在不可路由。
Cookie 匹配
Cookie Route Predicate 可以接收兩個參數,一個是 Cookie name ,一個是正則表達式,路由規則會通過獲取對應的 Cookie name 值和正則表達式去匹配,如果匹配上就會執行路由,如果沒有匹配上則不執行。
不帶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"
返回正常
Header 匹配
Header Predicate 和 Cookie Predicate 一樣,也是接收 2 個參數,一個 header 中屬性名稱和一個正則表達式,這個屬性值和正則表達式匹配則執行。
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 項目依賴
- 配置
- 代碼實現
- 路由規則
- 總結
前言
前篇我們介紹了Gateway的由來,這一篇我們介紹一下Gateway的使用,希望能夠幫到小夥伴們。
Gateway網關路由有兩種配置方式:
1、在配置文件yml中配置
2、代碼中注入RouteLocator的Bean
這兩種方式是等價的,建議使用yml配置方式
項目依賴
我們採用最新的版本
因為Gateway使用的是Netty + webflux,所以不需要引入web模塊;只要引入spring-cloud-starter-gateway就行了,裡面包含了spring-boot-starter-webflux
注:什麼是webflux,老顧以後介紹
配置
屬性含義如下:
id:我們自定義的路由 ID,保持唯一
uri:目標服務地址
predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該屬性包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)
請求效果
上面這段配置的意思是,配置了一個id為route-name的路由規則,當訪問地址 http://localhost:8080/get 時會自動轉發到地址:http://httpbin.org:80/get
代碼實現
效果和配置方式是一樣的。
上面我們簡單的用兩個案例演示了Gateway的路由轉發,下面我們詳細介紹一下路由規則。
路由規則
Spring Cloud Gateway 的功能很強大,前面我們只是使用了 predicates 進行了簡單Path的條件匹配,其實Gataway幫我們內置了很多 Predicates功能。
在項目啟動日誌中,我們就能發現有很多PredicateFactory。Gateway 是通過Spring WebFlux的HandlerMapping做為底層支持來匹配到轉發路由,這些 Predicates 工廠通過不同的HTTP請求參數來匹配,多個 Predicates 工廠可以組合使用。
Predicate 介紹
Predicate 來源於 Java 8,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默認方法來將 Predicate 組合成其他複雜的邏輯(比如:與,或,非)。
在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有通過 Header、請求參數等不同的條件來進行作為條件匹配到對應的路由。
網上有一張圖總結了 Spring Cloud 內置的幾種 Predicate 的實現。
上圖中,很清晰的說明了各個工廠的規則,說到底Predicate就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理。
時間匹配
Gateway支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之後進行轉發。比如我們現在設置只有在2019年9月10日才會路由轉發,在這之前不進行轉發,我就可以這樣配置:
上面的配置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,如下:
就表示在這個時間之前可以進行路由,在這時間之後停止路由。
有了時間前與時間後,當然就會有時間之間Between,如下:
意思一看就能看出,在兩時間之間即可路由,不在不可路由。
Cookie 匹配
Cookie Route Predicate 可以接收兩個參數,一個是 Cookie name ,一個是正則表達式,路由規則會通過獲取對應的 Cookie name 值和正則表達式去匹配,如果匹配上就會執行路由,如果沒有匹配上則不執行。
不帶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"
返回正常
Header 匹配
Header Predicate 和 Cookie Predicate 一樣,也是接收 2 個參數,一個 header 中屬性名稱和一個正則表達式,這個屬性值和正則表達式匹配則執行。
上面的意思,就是請求頭要有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介紹
3、學習Lambda表達式看這篇就夠了,不會讓你失望的哦(續篇)
6、不說“分佈式事務”理論,直接上大廠阿里的解決方案,絕對實用
7、女程序員問到這個問題,讓我思考了半天,Mysql的“三高”架構
8、大廠二面:CAP原則為什麼只能滿足其中兩項?而不能同時滿足
11、你瞭解如何利用token方式實現分佈式Session嗎?
12、Mysql索引結構演變,為什麼最終會是那個結構呢?讓你一看就懂
21、分享一線互聯網大廠分佈式唯一ID設計 之 snowflake方案
25、如何永不遷移數據和避免熱點? 根據服務器指標分配數據量(揭祕篇)
26、你知道怎麼分庫分表嗎?如何做到永不遷移數據和避免熱點嗎?
28、你知道如何更新緩存嗎?如何保證緩存和數據庫雙寫一致性?
30、DB讀寫分離情況下,如何解決緩存和數據庫不一致性問題?
36、阿里二面:filter、interceptor、aspect應如何選擇?很多人中招