一、概述
之前配置的Sentinel限流,熔断策略,默认情况下Sentinel的数据是基于内存存储,当客户端断开,或者Sentinel重启数据就会丢失,正常使用是不可能重启一次服务就去重新配置一次策略,需要Sentinel做数据持久, Sentinel 中支持5种持久化的方式:file、redis、nacos、zk和apollo。
二、Nacos持久化
一.POM依赖
<!--Sentinel和Nacos做持久的--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency>
二.配置文件
spring:application:name: cloudalibaba-sentinel-feign-servicecloud:nacos:discovery:server-addr: 119.91.99.85:8849sentinel:transport:dashboard: localhost:8080 #配置Sentinel dashboard地址port: 8719 #应用与Sentinel控制台交互的端口datasource:ds1:nacos: #nacos限流持久配置server-addr: 119.91.99.85:8849 #nacos地址dataId: ${
spring.application.name} #获取限流的数据源的dataIdgroupId: DEFAULT_GROUP #获取限流的数据源的分组data-type: json #数据类型rule-type: flow #规则类型
# 激活sentinel对openfeign的支持
feign:sentinel:enabled: true
1、RuleType规则类型
指数据源中的规则类型
1.FLOW(流控规则)
限流规则
2.DEGRADE(熔断规则)
熔断降级规则
3.PARAM_FLOW(热点规则)
热词限流规则
4.SYSTEM(系统规则)
系统规则
5.AUTHORITY(授权规则)
6.GW_FLOW(网关集群流控规则)
7.GW_API_GROUP
这个是啥我没太理解
2、DataType数据类型
sentinel默认是json,使用xml还得导入其他的包,就用json吧。
三.nacos配置持久化数据
1、简单案例
1.服务端代码
// 限流,参数和返回值与源方法一致public User exceptionHandler(@PathVariable Long id, BlockException ex) {
ex.printStackTrace();System.out.println("服务限流");return new User(-1L, "限流了", "限流了");}// 熔断public User getByIdfallback(@PathVariable Long id) {
System.out.println("熔断降级");return new User(id, "zs:" + id, "熔断托底了");}@GetMapping("/user/{id}")//限流降级//@SentinelResource(value="user",blockHandler="exceptionHandler")@SentinelResource(value = "user", blockHandler = "exceptionHandler", fallback = "getByIdfallback")public User getById(@PathVariable Long id) {
int i = (int) (1 / id); //方法异常,触发熔断User u = new User(id, "zs:" + id, "我是zs");System.out.println(u.toString());return u;}
2.nacos配置
[{
"resource": "user","limitApp": "default","grade": 1,"count": 4,"strategy": 0,"controlBehavior": 0,"clusterMode": false}
]
3.测试
重新启动服务之后,就会看到
2、参数说明
1.resource
资源名,即限流规则的作用对象
2.limitApp
流控针对的调用来源,若为 default 则不区分调用来源
3.grade
限流阈值类型(QPS 或并发线程数);0代表根据并发数量来限流,1代表根据QPS来进行流量控制
4.count
限流阈值
5.strategy
调用关系限流策略
6.controlBehavior
流量控制效果(0直接拒绝、1Warm Up、2匀速排队)
7.clusterMode
是否为集群模式