在微服務中,咱們會有不少個微服務,可是客戶端只有一個,它有調用咱們遠程接口的時候,就要使用不一樣的地址,好比下邊三個微服務(也是本項目中出現的用到的三個微服務,獲取代碼地址見文末)html
服務名 | 項目名 | 示例接口調用地址 |
---|---|---|
商品模塊 | 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包那種項目?好比:web
http://localhost:80/goods/main
商品模塊http://localhost:80/order/main
訂單模塊http://localhost:80/user/main
用戶中心模塊好了,而後直接啓動那三個微服務和這個項目,在瀏覽器中,就能夠直接使用http://localhost:80/goods/main
這樣的地址訪問各個服務了。spring
這個在上邊的入門操做中已經演示過了,配置spring.cloud.gateway.routes
來進行路由匹配。後端
可是,在上邊咱們配置的uri是網絡地址(固然,能夠直接經過咱們的localhost配置到網絡上其餘的地址的,如baidu.com)。在微服務中,咱們確定是不能直接寫死的,並且一個微服務也可能會有多個地址,因此,咱們必定要配置成註冊中心的微服務名。修改的配置內容以下:瀏覽器
在上邊的配置文件中,routes中的predicates就是一系列的斷言,意思就是說,只有知足這樣的條件就能夠怎麼怎麼地。上邊用到了Path這一個屬性,除此以外,還有微信
path是根據路徑匹配,經常使用的還有Method(請求方法)、Host(請求的地址)等。這幾個斷言是「且」的關係,也就是說,若是你配置了多個predicates就要同時知足才能進行路由轉發。詳細參考網絡
就是在web應用中使用的Filter,它有什麼用呢?最多見的用處就是在先後端分離項目中,咱們能夠在網關層進行Token等受權的驗證(明天給大家來個實例)。app
代碼地址:關注微信公衆號「小魚與Java」,回覆SpringCloud獲取前後端分離