网关本质上要提供一个各种服务访问的入口,并提供服务接收并转发所有内外部的客户端调用,还有就是权限认证,限流控制等等。Spring Cloud Gateway是Spring公司基于Spring 5.0,Spring Boot 2.0 和 等技术开发的一个网关组件,它旨在为微服务架构提供一种简单有效的统一的 API入口,负责服务请求路由、组合及协议转换,并且基于 Filter 链的方式提供了权限认证,监控、限流等功能
优点:
性能强劲:是第一代网关Zuul的1.6倍。
功能强大:内置了很多实用的功能,例如转发、监控、限流等
设计优雅,容易扩展。
缺点:
依赖Netty与WebFlux(Spring5.0),不是传统的Servlet编程模型(Spring MVC就是基于此模型实现),学习成本高。
目录
快速入门
创建一个新的maven子项目pom文件中添加依赖
编写yml文件
编写网关的启动类
启动服务(网关启动类,provider提供方启动类)
在idea中打开访问url模拟器
访问网关服务就可以访问提供方提供额业务啦
如何实现网关的负载均衡
先在pom文件中添加nacos依赖
启动sca-gateway
启动sca-provider8081端口和8082端口
在浏览器模拟器中访问网关url就可以获取服务端提供的服务了,并且是负载均衡的,这样就可以把服务端的url地址给隐藏保护了
网关限流的入门
第一步添加依赖
编写yml配置
快速入门
创建一个新的maven子项目pom文件中添加依赖
01-sca com.jt 1.0-SNAPSHOT 4.0.0 sca-getewaycom.jt sca-common1.0-SNAPSHOT org.springframework.boot spring-boot-starterorg.springframework.cloud spring-cloud-starter-gateway
注意:
编写yml文件
server:
port: 9000
spring:
application:
name: sca-gateway #可以省略的
cloud:
gateway:
routes: #配置网关路由规则 #路由配置(routes下可以有多个路由,用id作为唯一标识)
- id: route01 #路由id,自己指定一个唯一值即可
uri: http://localhost:8081/ #网关帮我们转发的url,请求转发路径,一般请求访问的是网关,网关会帮忙转达的
predicates: ###断言(谓此):匹配请求规则(定义转发条件,只有谓词所有条件都满足才会请求抓发)
- Path=/nacos/provider/echo/** #请求路径定义,此路径对应uri中的资源,(**)代表多级目录
filters: ##网关过滤器,用于对谓词中的内容进行判断分析以及处理,这也是局部过滤器,针对于具体(当前)路由进行设计,谓词条件为true时则执行这里的filter
- StripPrefix=1 #转发之前去掉path中第一层路径,例如nacos,去除前缀过滤器,这里的1就是去除path的第一层目录
#虽然网关没有在nacos进行注册,但是这个子项目sca-gateway在nacos进行注册了所以得启动nacos
编写网关的启动类
启动服务(网关启动类,provider提供方启动类)
在idea中打开访问url模拟器
访问网关服务就可以访问提供方提供额业务啦
如何实现网关的负载均衡
先在pom文件中添加nacos依赖
在yml文件中添加配置
server:
port: 9000
spring:
application:
name: sca-gateway #可以省略的
cloud:
nacos:
discovery: #注册和发现
server-addr: localhost:8848
gateway: #网关配置
routes: #配置网关路由规则 #路由配置(routes下可以有多个路由,用id作为唯一标识)
- id: route01 #路由id,自己指定一个唯一值即可
#lb表示负载均衡
uri: lb://sca-provider #网关帮我们转发的url,请求转发路径,一般请求访问的是网关,网关会帮忙转达的
#url是uri的一个子集
predicates: ###断言(谓此):匹配请求规则(定义转发条件,只有谓词所有条件都满足才会请求抓发)
- Path=/nacos/provider/echo/** #请求路径定义,此路径对应uri中的资源,(**)代表多级目录
filters: ##网关过滤器,用于对谓词中的内容进行判断分析以及处理,这也是局部过滤器,针对于具体(当前)路由进行设计,谓词条件为true时则执行这里的filter
- StripPrefix=1 #转发之前去掉path中第一层路径,例如nacos,去除前缀过滤器,这里的1就是去除path的第一层目录
#虽然网关没有在nacos进行注册,但是这个子项目sca-gateway在nacos进行注册了所以得启动nacos
启动sca-gateway
启动sca-provider8081端口和8082端口
在浏览器模拟器中访问网关url就可以获取服务端提供的服务了,并且是负载均衡的,这样就可以把服务端的url地址给隐藏保护了
在浏览器模拟器中访问网关url就可以获取服务端提供的服务了,并且是负载均衡的,这样就可以把服务端的url地址给隐藏保护了
网关限流的入门
第一步添加依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
com.alibaba.cloud
spring-cloud-alibaba-sentinel-gateway
编写yml配置
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
com.alibaba.cloud
spring-cloud-alibaba-sentinel-gateway
编写yml配置
server:
port: 9000
spring:
application:
name: sca-gateway #可以省略的
cloud:
#虽然网关没有在nacos进行注册,但是这个子项目sca-gateway在nacos进行注册了所以得启动nacos
nacos:
discovery: #注册和发现
server-addr: localhost:8848
sentinel:
transport:
dashboard: localhost:8180
eager: true # 服务启动的时候sentinel控制台看到的服务信息
gateway: #网关配置
routes: #配置网关路由规则 #路由配置(routes下可以有多个路由,用id作为唯一标识)
- id: route01 #路由id,自己指定一个唯一值即可
#lb表示负载均衡
uri: lb://sca-provider #网关帮我们转发的url,请求转发路径,一般请求访问的是网关,网关会帮忙转达的
#url是uri的一个子集
predicates: ###断言(谓此):匹配请求规则(定义转发条件,只有谓词所有条件都满足才会请求抓发)
- Path=/nacos/provider/echo/** #请求路径定义,此路径对应uri中的资源,(**)代表多级目录
# - Header=X-Request-Id, d+
# - Method=Get
# - Query=token. d+
filters: ##网关过滤器,用于对谓词中的内容进行判断分析以及处理,这也是局部过滤器,针对于具体(当前)路由进行设计,谓词条件为true时则执行这里的filter
- StripPrefix=1 #转发之前去掉path中第一层路径,例如nacos,去除前缀过滤器,这里的1就是去除path的第一层目录
基于请求属性限流



