开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第二阶段:Sentinel 规则持久化】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/684/detail/11882
Sentinel规则持久化
规则持久化
这个规则有一个缺点,它默认保存在内存中,一旦微服务重新启动,规则就会自动丢失。
添加一个流控规则,新增,刷新
得到结果:
如果微服务重启了再刷新,会发现流控规则已经消失了。
如何将内存中的规则持久化?
本地文件数据,会定时轮询文件的变更、读取规则,这样我们既可以在应用本地直接修改文件来更新规则,也可以通过 Sentinel 控制台推送规则,以此以本地数据文件数据源为例,推送规则如下图所示。
以下就是 Sentinel 规则持久化的原理图:
Sentinel Dashboard 可以向 Sentinel 客户端推送规则,Sentinel 客户端其实就是集成在微服务里的一个目标,收到规则以后就会将规则默认的送到内存中。
我们现在要做的是在内存中放一份。再向本地文件放一份。
Sentinel 控制台通过 API 将规则推送至客户端并更新到内存中,接着注册的写数据源会将新的规则保存到本地的文件中。
首先,编写处理类,文件持久化,实现一个接口,将代码都填进去。
那么此时,我们当前所有的规则都会存在。这个目录下面。
String ruleDir = system. get property(“user home”) + ”/sentinel rules/”+ applicationname;
添加配置
在 resource 下创建配置目录META-INF/Service ,然后添加文件com.alibaba.csp.sentinel.init.Initfunc
,在文件中添加配置类的全路径。
Com.itheima.config.FilePersistence
找到resource,新建一个文件夹
第二步,将文件名填入新的文件夹中。
在这个文件里添加第一步写的持久化的类。
重新启动微服务,流控规则依然存在。
切换到流控规则,规则依旧存在。