您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“SpringCloud GateWay網關怎么配置”,內容詳細,步驟清晰,細節處理妥當,希望這篇“SpringCloud GateWay網關怎么配置”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
API 網關出現的原因是微服務架構的出現,不同的微服務一般會有不同的網絡地址,而外部客戶端可能需要調用多個服務的接口才能完成一個業務需求,如果讓客戶端直接與各個微服務通信,會有以下的問題:
(1)客戶端會多次請求不同的微服務,增加了客戶端的復雜性。
(2)存在跨域請求,在一定場景下處理相對復雜。
(3)認證復雜,每個服務都需要獨立認證。
(4)難以重構,隨著項目的迭代,可能需要重新劃分微服務。例如,可能將多個服務合并成一個或者將一個服務拆分成多個。如果客戶端直接與微服務通信,那么重構將會很難實施。
(5)某些微服務可能使用了防火墻 / 瀏覽器不友好的協議,直接訪問會有一定的困難。
以上這些問題可以借助 API 網關解決。API 網關是介于客戶端和服務器端之間的中間層,所有的外部請求都會先經過 API 網關這一層。也就是說,API 的實現方面更多的考慮業務邏輯,而安全、性能、監控可以交由 API 網關來做,這樣既提高業務靈活性又不缺安全性
Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技術開發的網關,Spring Cloud Gateway旨在為微服務架構提供簡單、有效和統一的API路由管理方式,Spring Cloud Gateway作為Spring Cloud生態系統中的網關,目標是替代Netflix Zuul,其不僅提供統一的路由方式,并且還基于Filer鏈的方式提供了網關基本的功能,例如:安全、監控/埋點、限流等。
網關提供API全托管服務,豐富的API管理功能,輔助企業管理大規模的API,以降低管理成本和安全風險,包括協議適配、協議轉發、安全策略、防刷、流量、監控日志等貢呢。一般來說網關對外暴露的URL或者接口信息,我們統稱為路由信息。如果研發過網關中間件或者使用過Zuul的人,會知道網關的核心是Filter以及Filter Chain(Filter責任鏈)。Sprig Cloud Gateway也具有路由和Filter的概念。
下面介紹一下Spring Cloud Gateway中幾個重要的概念。
(1)路由。路由是網關最基礎的部分,路由信息有一個ID、一個目的URL、一組斷言和一組Filter組成。如果斷言路由為真,則說明請求的URL和配置匹配
(2)斷言。Java8中的斷言函數。Spring Cloud Gateway中的斷言函數輸入類型是Spring5.0框架中的ServerWebExchange。Spring Cloud Gateway中的斷言函數允許開發者去定義匹配來自于http
request中的任何信息,比如請求頭和參數等。
(3)過濾器。一個標準的Spring webFilter。Spring cloud gateway中的filter分為兩種類型的Filter,分別是Gateway Filter和Global Filter。過濾器Filter將會對請求和響應進行修改處理
如上圖所示,Spring cloud Gateway發出請求。然后再由Gateway Handler Mapping中找到與請求相匹配的路由,將其發送到Gateway web handler。Handler再通過指定的過濾器鏈將請求發送到我們實際的服務執行業務邏輯,然后返回。
Spring cloud Gateway的功能很多很強大,下面簡單實現一下負載均衡以及服務發現
引入相關依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <!--gson--> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> </dependency> <!--服務調用--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
添加配置文件
# 服務端口 server.port=8222 # 服務名 spring.application.name=service-gateway # nacos服務地址 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 #使用服務發現路由 spring.cloud.gateway.discovery.locator.enabled=true #設置路由id 0代表第一個服務 spring.cloud.gateway.routes[0].id=service-edu #設置路由的uri lb://nacos注冊的服務名稱 spring.cloud.gateway.routes[0].uri=lb://service-edu #設置路由斷言,代理servicerId為auth-service的/auth/路徑 spring.cloud.gateway.routes[0].predicates= Path=/eduservice/** #設置路由id spring.cloud.gateway.routes[1].id=service-msm #設置路由的uri lb://nacos注冊的服務名稱 spring.cloud.gateway.routes[1].uri=lb://service-msm #設置路由斷言,代理servicerId為auth-service的/auth/路徑 spring.cloud.gateway.routes[1].predicates= Path=/edumsm/**
記得在啟動類上添加上@EnableDiscoveryClient
注解因為gateway需要結合nacos一起使用
確保gateway網關模塊和其他模塊都在nacos中注冊了,如
原本edu模塊的端口號是8001,現在去訪問gateway模塊的8222端口也能訪問到edu的服務了,這樣就實現了服務發現 負載均衡(gateway能自動幫助我們負載均衡,無需再做其他的配置)。這樣是不是就覺得能拋棄nginx了呢?
其實實際項目中更多是是nginx和gateway結合一起使用的,主要是因為gateway相當于還是業務系統的一部分,一旦發生宕機整個系統將不可訪問。在gateway前面一定要再加nginx。nginx后端對應多個gateway,nginx只是代理流量轉發沒有任何業務邏輯,這樣既能保證穩定,又能實現橫向負載均衡。
即:Nginx先將客戶端的請求負載均衡到SpringGateway,然后SpringGateway再通過服務發現,將請求負載均衡到各個業務微服務上。
此外nignx與gateway結合還能實現動靜分離
在實際的開發中,有些請求需要通過后臺處理,有些請求則不需要。需要后臺處理的文件稱之為動態資源,不要后臺處理的稱之為靜態資源。那么我們可以將靜態資源部署在nginx上,將動態資源部署在微服務集群上,這樣能提高資源的響應速度。
讀到這里,這篇“SpringCloud GateWay網關怎么配置”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。