Spring Cloud Gateway 是 Spring 官方基于 Spring 5.x,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,旨在为微服务架构提供一种简单而有效的统一的 API 路由管理方式,目标是替代 Netflix Zuul,底层是Netty网络编程框架-ServerSocket,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,可用于服务安全,统一服务入口管理,负载均衡,限流,鉴权
第二步:yml文件中添加相关配置
其中:路由(routes) 是 gateway 中最基本的组件之一,表示一个具体的路由信息载体。主要定义了下面的几个信息:
- id,路由标识符,区别于其他 Route
- uri,路由指向的目的地 uri,即客户端请求最终被转发到的微服务
- predicate,断言(谓词)的作用是进行条件判断,只有断言都返回真,才会执行路由。
- filter,过滤器用于修改请求和响应信息
第三步:依次启动sca-provider,sca-gateway服务,然后打开浏览器,进行访问测试,

网关才是服务访问的入口,所有服务都会在网关层面进行底层映射,所以在访问服务时,要基于服务serivce id(服务名)去查找对应的服务,让请求从网关层进行均衡转发,以平衡服务实例的处理能力。
第一步、项目添加nacos依赖
第二步、将入门配置的uri: http://localhost:8082 改为通过lb协议和服务名,lb指的是从nacos中按照名称获取微服务,并遵循负载均衡策略
启动服务,进行访问测试,并反复刷新分析
说明:Predicate(断言)又称谓词,用于条件判断,只有断言结果都为真,才会真正的执行路由。断言其本质就是定义路由转发的条件。
SpringCloud Gateway包括一些内置的断言工厂,所有这些断言都与http请求的不同属性相匹配
此类型的断言根据时间做判断,主要有三个:
1) AfterRoutePredicateFactory:判断请求日期是否晚于指定日期
2) BeforeRoutePredicateFactory:判断请求日期是否早于指定日期
3) BetweenRoutePredicateFactory:判断请求日期是否在指定时间段内
判断请求Header是否具有给定名称且值与正则表达式匹配。例如:-Header=X-Request-Id, d+
MethodRoutePredicateFactory接收一个参数,判断请求类型是否跟指定的类型匹配。例如:-Method=GET
接收两个参数,请求param和正则表达式, 判断请求参数是否具 有给定名称且值与正则表达式匹配。例如:-Query=pageSize,d+
说明:当条件不满足时,则无法进行路由转发,会出现404异常。
过滤器(Filter)就是在请求传递过程中,对请求和响应做一个处理。Gateway 的Filter从作用范围可分为以下两种:
GatewayFilter:应用到单个路由或者一个分组的路由上。
GlobalFilter:应用到所有的路由上。
例如,为原始请求添加名为 X-Request-Foo ,值为 Bar 的请求头:
例如,为原始请求添加名为foo,值为bar的参数,即:foo=bar
在系统初始化时加载,并作用在每个路由上。通过全局过滤器可以实现对权限的统一校验,安全性验证等功能。一般内置的全局过滤器已经可以完成大部分的功能,但是对于企业开发的一些业务功能处理,还是需要我们 自己编写过滤器来实现的
网关是所有请求的公共入口,所以可以在网关进行限流,而且限流的方式也很多,这里采用Sentinel组件来实现网关的限流。Sentinel支持对SpringCloud Gateway、Zuul等主流网关进行限流
添加sentinel限流的相关依赖
yml文件添加sentinel相关配置
最后所有yml文件的内容如下
启动网关项目,添加sentinel的jvm参数,通过此菜单可以让网关服务在sentinel控制台显示不一样的菜单

在sentinel面板中设置限流策略

测试限流策略是否生效


Postman测试效果如下

自定义API分组,是一种更细粒度的限流规则定义,它允许我们利用sentinel提供的API,将请求路径进行分组,然后在组上设置限流规则
第一步:新建API分组

第二步:新建分组流控规则

访问测试

版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/4373.html