sentinel流控及降级持久化

it2023-05-15  69

简介:

为什么要对sentinel进行流控及降级持久化呢?因为当我们启动java应用程序后,被http调用的接口可以在sentinel中设置限流以及降级规则,但当你重启java应用程序的时候 会发现,之前设置过的限流规则以及降级的规则消失了,试想一下,接口少的时候还可以花一点点时间重新设置限流规则,但是接口多了怎么办,如果重启一次java应用就要重新设置规则的话, 那岂不是太浪费时间了。所以针对这种情况,我们可以将流控规则以及降级的规则持久化到nacos配置中

还不会限流以及降级的建议先看这篇文章:搭建SpringCloud-Alibaba框架

Pom

<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency>

流控持久化

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=flow

data-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应用程序、请求接口

 

最新回复(0)