为什么要对sentinel进行流控及降级持久化呢?因为当我们启动java应用程序后,被http调用的接口可以在sentinel中设置限流以及降级规则,但当你重启java应用程序的时候 会发现,之前设置过的限流规则以及降级的规则消失了,试想一下,接口少的时候还可以花一点点时间重新设置限流规则,但是接口多了怎么办,如果重启一次java应用就要重新设置规则的话, 那岂不是太浪费时间了。所以针对这种情况,我们可以将流控规则以及降级的规则持久化到nacos配置中
还不会限流以及降级的建议先看这篇文章:搭建SpringCloud-Alibaba框架
1、准备好要进行限流的接口
@RestController @RequestMapping("/user") public class UserController { @GetMapping("/testF") @SentinelResource(value = "testF", blockHandlerClass = SentinelCommonException.class,blockHandler = "flowException") public JsonResult testF() { return new JsonResult(200,"请求成功"); } }注:@SentinelResource 自定义流控以及降级的异常的注解
①在nacos自定义的命名空间中创建配置
我的限流规则是:每秒钟Qps点击数为1,流控模式为直接模式,流控效果是直接
注:
Data ID:不要带 .properties或yaml 的后缀
配置格式:选择 json 选项
配置内容:
resource: 资源名称
limitApp: 来源应用
grade: 阈值类型,0表示线程,1表示QPS
count: 单机阈值
strategy: 流控模式,0表示直接,1表示关联,2表示链路
controlBehavior: 流控效果,0表示快速失败,1表示Warm Up,2表示排队等待
clusterMode: 是否集群
②application.properties
spring.cloud.sentinel.datasource.ds1.nacos.namespace=dddf9ef6-638a-42fa-9b82-9c61a944f6cc spring.cloud.sentinel.datasource.ds1.nacos.server-addr=localhost:8848 spring.cloud.sentinel.datasource.ds1.nacos.data-id=sentinel-datasource spring.cloud.sentinel.datasource.ds1.nacos.group-id=DEFAULT_GROUP spring.cloud.sentinel.datasource.ds1.nacos.data-type=json spring.cloud.sentinel.datasource.ds1.nacos.rule-type=flowdata-typ == nacos中的 【配置格式】
rule-type:FLOW-流控、DEGRADE-降级。因为上面的配置是用于限流的,所以我们rule-type就选择 flow
测试:启动nacos、启动sentinel、启动java应用程序、请求接口
根据我设置的限流规则来看,我每秒钟点击数为2时,则会被限流
1、准备好要进行降级的接口
@Slf4j @RestController @RequestMapping("/user") public class UserController { @GetMapping("/testG") @SentinelResource(value = "testG", blockHandlerClass = SentinelCommonException.class,blockHandler = "degradeException") public JsonResult testG() throws InterruptedException { SimpleDateFormat dateFormat = new SimpleDateFormat("mm:ss"); String format = dateFormat.format(new Date()); log.info("当前为开始时间:"+format); //睡1秒钟 TimeUnit.SECONDS.sleep(1); String format1 = dateFormat.format(new Date()); log.info("当前为结束时间:"+format1); return new JsonResult(200,"请求成功"); } }2、降级规则持久化到 nacos 中
流程跟上面的流控是一样的,我就不重复写了
规则含义
resource 资源名,即规则的作用对象
grade 熔断策略,支持慢调用比例/异常比例/异常数策略 慢调用比例
count 慢调用比例模式下为慢调用临界 RT(超出该值计为慢调用);异常比例/异常数模式下为对应的阈值
timeWindow 熔断时长,单位为 s
minRequestAmount 熔断触发的最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断(1.7.0 引入) 5
statIntervalMs 统计时长(单位为 ms),如 60*1000 代表分钟级(1.8.0 引入) 1000 ms
slowRatioThreshold 慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入)
对应关系
测试:启动nacos、启动sentinel、启动java应用程序、请求接口