在微服務中,咱們會有不少個微服務,可是客戶端只有一個,它有調用咱們遠程接口的時候,就要使用不一樣的地址,好比下邊三個微服務(也是本項目中出現的用到的三個微服務,獲取代碼地址見文末)web
服務名 | 項目名 | 示例接口調用地址 |
---|---|---|
商品模塊 | 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包那種項目?好比:spring
http://localhost:80/goods/main | 商品模塊 |
http://localhost:80/order/main | 訂單模塊 |
http://localhost:80/user/main | 用戶中心模塊 |
引入依賴pom.xml後端
配置application.yml瀏覽器
主啓動類微信
好了,而後直接啓動那三個微服務和這個項目,在瀏覽器中,就能夠直接使用http://localhost:80/goods/main
這樣的地址訪問各個服務了。網絡
路由(Route)app
這個在上邊的入門操做中已經演示過了,配置spring.cloud.gateway.routes
來進行路由匹配。前後端分離
可是,在上邊咱們配置的uri是網絡地址(固然,能夠直接經過咱們的localhost配置到網絡上其餘的地址的,如baidu.com)。在微服務中,咱們確定是不能直接寫死的,並且一個微服務也可能會有多個地址,因此,咱們必定要配置成註冊中心的微服務名。修改的配置內容以下:ide
除了上述的application.yml外,還有一種方式配置路由(我猜你確定不要說是applicatin.properties吧)。那就是經過注入SpringBean的方式,這裏就不說,有興趣的能夠去官網看一下。可是建議你使用配置文件配置,由於能夠集成Nacos進行動態配置,要比寫進代碼裏更加靈活。
斷言(Predicates)
在上邊的配置文件中,routes中的predicates就是一系列的斷言,意思就是說,只有知足這樣的條件就能夠怎麼怎麼地。上邊到了Path這一個屬性,除此以外,還有
path是根據路徑匹配,經常使用的還有Method(請求方法)、Host(請求的地址)等。這幾個斷言是「且」的關係,也就是說,若是你配置了多個predicates就要同時知足才能進行路由轉發。詳細參考GateWay
過濾器(Filter)
就是在web應用中使用的Filter,它有什麼用呢?最多見的用處就是在先後端分離項目中,咱們能夠在網關層進行Token等受權的驗證(明天給大家來個實例)。
獲取本項目代碼及更多學習
關注後,在後臺回覆 SpringCloud 獲取
掃描二維碼
獲取更多精彩
小魚與Java
本文分享自微信公衆號 - 小魚與Java(Fish_Java)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。