在微服務架構中,每一個服務都是一個能夠獨立開發和運行的組件,而一個完整的微服務架構由一系列獨立運行的微服務組成。其中每一個服務都只會完成特定領域的功能,好比訂單服務提供與訂單業務場景有關的功能、商品服務提供商品展現功能等。各個微服務之間經過輕量級通訊機制 REST API 或者 RPC 完成通訊。 微服務以後在某些層面會帶來必定的影響,好比,一個用戶查看一個商品的詳情,對於客戶端來講,可能須要調用商品服務、評論服務、庫存服務、營銷服務等多個服務來完成數據的渲染在這個場景中,客戶端雖然能經過調用多個服務實現數據的獲取,可是會存在一 些問題,好比:html
因此,咱們能夠在微服務以前增長一個前置節點,這個節點就是網關,網關就是一個網絡鏈接到另外一個網絡的「關口」。也就是網絡。而在微服務架構中,它不只僅只是一個網絡互連的一個關口,還有更多的做用,之前面分析的這個場景爲例,增長網關以後全部請求的下發都由網關下發;對於商品詳情展現的場景來講,增長了 API 網關以後,在 API 網關層能夠把後端的多個服務進行整合,而後提供一個惟一的業務接口,客戶端只須要調用這個接口便可完成數據的獲取及展現。在網關中會再去消費後端的多個微服務進行統一的整合,給客戶端返回一個惟一的響應。去消費後端的多個微服務進行統一的整合,給客戶端返回一個惟一的響應。java
從上面的案例來看,網關成了全部流量的入口,那麼對於這樣一個角色來講,它須要在某些方面有很高的要求spring
常見的網關方案後端
網關選型api
它的總體工做原理以下。緩存
其中,predicate就是咱們的匹配條件;而filter,就能夠理解爲一個無所不能的攔截器。有了這兩個元素,再加上目標uri,就能夠實現一個具體的路由了。客戶端向 Spring Cloud Gateway 發出請求,若是請求與網關程序定義的路由匹配,則該請求就會被髮送到網關 Web 處理程序,此時處理程序運行特定的請求過濾器鏈。過濾器之間用虛線分開的緣由是過濾器可能會在發送代理請求的先後執行邏輯。全部 pre 過濾器邏輯先執行,而後執行代理請求;代理請求完成後,執行 post 過濾器邏輯安全
新建一個spring-cloud-gateway服務網絡
在spring-cloud-gateway服務中導入如下包架構
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency>
而後在配置文件中配置以下app
server: port: 9100 spring: application: name: spring-cloud-gateway cloud: gateway: routes: - predicates: - Path=/service/** filters: #過濾 - StripPrefix=1 uri: http://localhost:8080/ eureka: instance: hostname: localhost client: serviceUrl: defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ #指向服務註冊中心的地址
啓動項目經過網關訪問業務服務,發現能夠直接經過網關的端口發起訪問
https://docs.spring.io/spring-cloud-gateway/docs/2.2.5.RELEASE/reference/html/#the-after-route-predicate-factory
這是官方提供的11種斷言方法,有興趣能夠按官網的去配置玩下,cloud整個體系配置相對來講很簡單的
下面就寫一個關於經常使用的Cookie配置下;
若是官網提供的斷言不知足本身的要求,官網也支持自定義斷言;自定義斷言要繼承AbstractRoutePredicateFactory這個抽象工廠,咱們自定義的斷言類名後綴必須是RoutePredicateFactory;自定義也很簡單也就是看別人怎麼寫的而後抄就完了
而後把以前測試工具的Cookies刪除,調用成功