什么是路由網關?它存在意義又何在?
在微服務中,我們會有很多個微服務,但是客戶端只有一個,它有調用我們遠程接口的時候,就要使用不同的地址,比如下邊三個微服務(也是本項目中出現的用到的三個微服務,獲取代碼地址見文末)
服務名 | 項目名 | 示例接口調用地址 |
---|---|---|
商品模塊 | gateway-goods-7001 | http://localhost:7001/goods/main |
訂單模塊 | gateway-order-8001 | http://localhost:8001/order/main |
用戶中心模塊 | gateway-user-9001 | http://localhost:9001/user/main |
這樣,客戶端在調用的時候,還要使用不同的地址(主機名和端口),能不能就直接使用一個地址可以調用呢?就類似於我們之前寫的一個war包那種項目?比如:
http://localhost:80/goods/main
商品模塊http://localhost:80/order/main
訂單模塊http://localhost:80/user/main
用戶中心模塊
GateWay的入門操作
- 引入依賴pom.xml
- 配置application.yml
- 主啟動類
好了,然后直接啟動那三個微服務和這個項目,在瀏覽器中,就可以直接使用http://localhost:80/goods/main
這樣的地址訪問各個服務了。
GateWay的三大組件
路由(Route)
這個在上邊的入門操作中已經演示過了,配置spring.cloud.gateway.routes
來進行路由匹配。
但是,在上邊我們配置的uri是網絡地址(當然,可以直接通過我們的localhost配置到網絡上其他的地址的,如baidu.com)。在微服務中,我們肯定是不能直接寫死的,而且一個微服務也可能會有多個地址,所以,我們一定要配置成注冊中心的微服務名。修改的配置內容如下:
- 除了上述的application.yml外,還有一種方式配置路由(我猜你肯定不要說是applicatin.properties吧)。那就是通過注入SpringBean的方式,這里就不說,有興趣的可以去官網看一下。但是建議你使用配置文件配置,因為可以集成Nacos進行動態配置,要比寫進代碼里更加靈活
斷言(Predicates)
在上邊的配置文件中,routes中的predicates就是一系列的斷言,意思就是說,只有滿足這樣的條件就可以怎么怎么地。上邊用到了Path這一個屬性,除此之外,還有
path是根據路徑匹配,常用的還有Method(請求方法)、Host(請求的地址)等。這幾個斷言是“且”的關系,也就是說,如果你配置了多個predicates就要同時滿足才能進行路由轉發。詳細參考
過濾器(Filter)
就是在web應用中使用的Filter,它有什么用呢?最常見的用處就是在前后端分離項目中,我們可以在網關層進行Token等授權的驗證(明天給你們來個實例)。
利用SpringSecurity和Gateway結合進行網絡鑒權和權限驗證
代碼地址:關注微信公眾號“小魚與Java”,回復SpringCloud獲取