这一篇记录一下Sentinel的最后一篇,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!
目录
Sentinel持久化到Nacos
前面我们测试的时候,发现每次重启项目后在Sentinel中配置的规则都会清空,很是麻烦,我们可以通过持久化的方式解决这个问题。
pom文件
在alibaba-sentinel-server中添加以下依赖:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
yml文件
修改yml文件,添加Nacos数据源配置,在sentinel配置下追加如下配置:
datasource:
ds1:
nacos:
server-addr: localhost:8848
dataId: alibaba-sentinel-server # 微服务名称
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow # 流控规则
完整yml如下:
server:
port: 8401
spring:
application:
name: alibaba-sentinel-server
cloud:
nacos:
discovery:
server-addr: localhost:8848
sentinel:
transport:
dashboard: localhost:8080
#默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口
port: 8719
datasource:
ds1:
nacos:
server-addr: localhost:8848
dataId: alibaba-sentinel-server # 微服务名称
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow # 流控规则
management:
endpoints:
web:
exposure:
include: '*'
新增Nacos配置
配置如下:
[
{
"resource":"/persistent",//资源名称
"limitApp":"default",//来源应用
"grade":1,//阈值类型,0线程数,1QPS
"count":1,//单机阈值
"strategy":0,//流控模式,0表示直接,1表示关联,2表示链路
"controlBehavior":0,//流控效果 ,0表示快速失败,1表示warm up,2表示排队等待
"clusterMode":false //是否集群
}
]
完善测试类
测试类FlowLimitController中添加以下测试方法:
@GetMapping("/persistent")
public String persistent() {
log.info("persistent 测试持久化");
return "------persistent 测试持久化";
}
测试
我们重启alibaba-sentinel-server服务,浏览器访问 http://localhost:8401/persistent ,然后刷新下Sentinel的页面,发现刚才配置的流控规则还在,说明持久化配置生效。
Sentinel持久化到Mysql
关于Sentinel的持久化,官方文档有介绍 点此查看
源码中也有推荐的博客及源码可以参考,感兴趣自己下载下来源码自己改下持久化到mysql的方式。