导入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>
下载sentinel
sentinel-dashboard-1.6.2
用Dos命令行启动sentinel服务
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=127.0.0.1:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.6.2.jar
在内容中心content-certer配置文件中配置sentinel地址
sentinel: transport: dashboard: 127.0.0.1:8080 #指定sentinel控制台的地址
打开sentinel开始画界面
流控规则
资源名:不一定是路径,只是唯一的名称
针对来源:针对的是哪个微服务
流控模式:
直接:当该API达到阈值就会直接触发流控效果
关联:
当关联资源中的API达到阈值,资源名中的API就会触发流控效果,当关联资源达到阈值,就限流自己
链路:
只记录指定链路上的流量
新建一个service
@SentinelResource("common")
控制器中调用该service
点击test-a中的common进行流控
入口资源写test-a
当test-a达到阈值就会别限流触发流控效果,而test-b不会。
流控效果:
快速失败:直接失败,抛异常
Warm UP(预热):根据codeFactor(默认3)的值,从阈值/codeFactor,经过预热时长,才达到设定好的QPS阈值。eg:(阈值=100;预热时长=10s)=>最初的阈值为100/3,经过十秒后慢慢爬升到100;适用于秒杀场景,允许通过的流量缓慢增加。
排队等待:匀速排队,让请求以均匀的速度通过,阈值类型必须是QPS,
eg:(阈值=100,超时时间=500),当API达到阈值一秒被访问100次后,后面的请求会进行排队等待,等待时间为500s,超过500s,这次排队的请求就会挂掉。
服务降级
降级即“断路器模式”
RT默认最大是4900ms,可以通过Dcsp.sentinel.statistic.max.rt=xxx修改最大RT (RT=1,时间窗口=5):这个API秒级统计大于1毫秒,并且在5秒内通过的请求大于等于五次,触发断路器。
时间统计为60s,如果时间窗口小于60s,就会出现时间窗口关闭后因为异常数是分钟级别的 所以会重新进入断路器,直到60s后
热点规则
热点规则是比服务降级更加细分到请求参数上
在内容中心编写
@GetMapping("/test-hot") @SentinelResource("hot") public String testHot(@RequestParam(required = false)String a, @RequestParam(required = false) String b){ return a+" "+b; }
在sentinel控制台中配置
当请求端点/share/1的第一个参数(参数索引对应的请求参数的下标索引)的在统计窗口时长(这里是1S)内QPS达到阈值(这里是1)
在编辑热点中,可以设置该参数为何值的阈值,这里是当参数为5的时候阈值为10000,在配置热点参数规则中,参数必须是八大基本类型或string
系统规则
授权规则
该端点只允许test访问(白名单),不允许访问(黑名单)