spring Cloud gateway控流规则
1.application.yml配置2.sentinel控流配置2.1Postman测试2.2 ideaClient-> Test Restful Web Service 测试3.sentinelAPI控流分组配置3.1Postman测试3.2 ideaClient-> Test Restful Web Service 测试
1.application.yml配置
server:
port: 9000
spring:
application:
name: sca-gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848
sentinel:
transport:
dashboard: localhost:8180 #
eager: true
gateway:
routes: #配置网关路由规则
- id: route01 #路由id,自己指定一个唯一值即可
#uri: http://localhost:8081/ #网关帮我们转发的url
uri: lb://sca-provider #lb表示负载均衡,sca-provider为服务名
predicates: ###断言(谓此):匹配请求规则(进行逻辑判断)
- Path=/nacos/provider/echo/** #请求路径定义,此路径对应uri中的资源
#- Query=pageSize,\d+
filters: ##网关过滤器,用于对谓词中的内容进行判断分析以及处理
- StripPrefix=1 #转发之前去掉path中第一层路径,例如nacos
拦截机制
当我们在访问 http://localhost:9000/nacos/provider/echo/01 时会被 route01 路由拦截,
拦截后方问uri:** http://localhost:8081/**这个地址,
拦截机制 负载均衡机制
或uri: lb://sca-provider ** lb表示负载均衡,sca-provider为服务名
过滤机制
我们打开浏览器输入http://localhost:9000/nacos/provider/echo/01时,网关会基于predicates对象对请求url基于predicates中的定义path进行比对,假如请求url端口号后面的内容,与predicates中path的定义是匹配的,此时会将url交给filters进行过滤,过滤器filter对请求过滤后,会将请求地址转发到真实的微服务(通过uri指定)
过滤路径
StripPrefix=1 #转发之前去掉path中第一层路径,例如nacos
如果StripPrefix=2 表示前两层路径自动去掉
1.1效果图
2.sentinel控流配置
2.1 启动 gateway
在这里配置Edit Configurations
-Dcsp.sentinel.app.type=1
2.2 Sentinel控制台配置
2.2.1 Route ID 配置
当配置都没有错时,请求链路会出现 在application.yml配置中的 routes 的id 名称 route01
只需配置QPS阈值保存,多点几下会出现下面的效果
2.3 Postman测试 针对请求属性
1.勾选 针对请求属性
2.填写 Header名称 自定义名称
3. 勾选 属性匹配
4. 匹配模式自选 匹配串:自定义
5. QPS:1 新增.
2.3.1 打开:Postman
1.输入url : http://localhost:9000/nacos/provider/echo/a
2.选中 Postman 中的 Header 选项
3.填写KEY token VALUE 123456 这里的key和sentinel中Header名称一致,value和sentinel中匹配串一致
4.对次点击Send 出现下面效果即可
3.sentinel API控流分组配置
3.1 Sentinel控制台配置
0.点击 新增API分组
1.API名称 自定义
2.匹配模式自选 匹配串填写url 访问路径 /nacos/provider/echo/a
可以添加多个.
3.然后回到请求链路 点击流控
3.2 Postman测试
下面这两图的区别是访问的url
因为我们给他API分组进行流控所以只有他俩不能访问,其他地址都可访问
下图访问路径: http://localhost:9000/nacos/provider/echo/a
下图访问路径: http://localhost:9000/nacos/provider/echo/aa
下图访问路径: http://localhost:9000/nacos/provider/echo/c
更多推荐
所有评论(0)