javascript
gateway网关_SpringCloud技术指南系列(十二)API网关之Gateway使用
SpringCloud技術指南系列(十二)API網關之Gateway使用
一、概述
API網關是一個更為智能的應用服務器,它的定義類似于面向對象設計模式中的Facade模式,它的存在就像是整個微服務架構系統的門面一樣,所有的外部客戶端訪問都需要經過它來進行調度和過濾。它除了要實現請求路由、 負載均衡、 校驗過濾等功能之外,還需要更多能力,比如與服務治理框架的結合、請求轉發時的熔斷機制、服務的聚合等一系列高級功能。
在SpringCloud全家桶中,API網關有Zuul和gateway兩種實現。 1. zuul進來逐漸被gateway取代。 2. zuul可以整合進任何SpringBoot應用 3. gateway基于異步非阻塞模型,使用的netty+webflux實現,不能加入web依賴,默認加載加入webflux依賴。 4. Spring Cloud zuul使用的仍是zuul 1.x,zuul 2.x也是異步非阻塞的。 4. 選用zuul還是gateway,要看使用場景,如果在已有的非WebFlux項目使用,要用zuul。單純的API網關獨立部署,建議gateway。
代碼可以在SpringBoot組件化構建https://www.pomit.cn/java/spring/springcloud.html中的EurekaGateway、ZkGateway和ConsulGateway組件中查看,并下載。分別對應三種不同的服務注冊方式。
首發地址: 品茗IT-同步發布
如果大家正在尋找一個java的學習環境,或者在開發中遇到困難,可以加入我們的java學習圈,點擊即可加入,共同學習,節約學習時間,減少很多在學習中遇到的難題。
二、項目配置
本篇的配置基于服務注冊發現的項目基礎上,并選擇Consul + Gateway為例講解如何使用zuul做API網關。至于(Eureka + Gateway)和 (zookeeper + Gateway)寫法上和(consul + Gateway)是一樣的,不再分開章節描述。
這里選擇Consul + Gateway為例,是因為它需要一個額外的健康檢查接口,其他無區別。
可以參考我前面的文章做對比:
《SpringCloud技術指南系列(五)服務注冊發現之Consul服務調用》
《SpringCloud技術指南系列(三)服務注冊發現之Eureka服務調用》
《SpringCloud技術指南系列(七)服務注冊發現之Zookeeper服務調用》
2.1 引入依賴
需要在建立好的項目中引入spring-cloud-starter-gateway,不能引入spring-boot-starter-web,因為它用的是webflux。
如果需要使用hystrix,要顯式引入spring-cloud-starter-netflix-hystrix。
本篇是在consul的服務發現基礎上進行gateway的配置,因此還需要引入consul相關配置。
依賴如下:
<?xml version="1.0"?>父模塊pom文件可以在https://www.pomit.cn/spring/SpringCloudWork/pom.xml獲取。
2.2 配置文件
這里使用yaml文件寫配置,配置文件application.yml:
application.yml:
server:port: 8819 spring:application:name: consulGatewaycloud:consul:host: 127.0.0.1port: 8500discovery:prefer-ip-address: truehealthCheckPath: /consul/healthgateway:discovery:locator:enabled: truelowerCaseServiceId: trueroutes:- id: myRouteuri: lb://consulFeignpredicates:- Path=/test/**filters:- StripPrefix=1- name: Hystrixargs:name: fallbackcmdfallbackUri: forward:/incaseoffailureusethiss- id: myOutsideRouteuri: https://cn.bing.com/predicates:- Path=/search/**filters:- StripPrefix=1這里,表示API網關在8819端口監聽,名字是consulGateway。
- spring.cloud.consul開頭的配置時consul服務注冊發現的配置。前面章節已經有說明。
- spring.cloud.gateway.discovery.locator.enabled開啟路由轉發功能
- spring.cloud.gateway.discovery.locator.lowerCaseServiceId是指注冊到cunsul的服務使用小寫。
- spring.cloud.gateway.routes.*:配置路由轉發。id是唯一的,uri如果使用lb:開頭,表示使用注冊的服務進行負載均衡。predicates.Path:表示請求的路徑。filters.StripPrefix表示轉發時路徑去掉幾層前綴。filters.name如果是Hystrix,表示使用Hystrix進行熔斷降級,需要配置fallbackUri進行降低轉發。
三、服務不可用降級接口
如果配置了hystrix做熔斷。當請求次數失敗次數過多(我測試第一次是8次,第二次變7次了),將不再請求,直接請求/incaseoffailureusethiss降級。
如圖所示,1.01s是請求失敗的過程,7次之后,就直接熔斷,所以響應時間小于10ms了。
FallbackController:
package四、啟動
啟動類無需做額外的配置,這里只有一個服務注冊的注解@EnableDiscoveryClient。
ConsulGatewayApplication :
package五、其他web
我們仍可以寫自己的web服務,和Gateway的轉發互不影響,但是路徑別重復了。 ConsulGatewayRest :
package六、Consul的健康檢測
這個是使用consul做注冊中心才需要的。
HealthWeb:
package七、使用到的實體
ResultModel:
詳細完整的實體,可以訪問品茗IT-博客《SpringCloud技術指南系列(十二)API網關之Gateway使用》進行查看
品茗IT-博客專題:https://www.pomit.cn/lecture.html匯總了Spring專題、Springboot專題、SpringCloud專題、web基礎配置專題。
快速構建項目
Spring項目快速開發工具:
一鍵快速構建Spring項目工具
一鍵快速構建SpringBoot項目工具
一鍵快速構建SpringCloud項目工具
一站式Springboot項目生成
Mysql一鍵生成Mybatis注解Mapper
Spring組件化構建
SpringBoot組件化構建
SpringCloud服務化構建
喜歡這篇文章么,喜歡就加入我們一起討論SpringBoot使用吧!
總結
以上是生活随笔為你收集整理的gateway网关_SpringCloud技术指南系列(十二)API网关之Gateway使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac vscode设置中文_VSCod
- 下一篇: gradle idea java ssm