Sentinel使用mysql进行规则持久化实践
提示:本文使用的sentinel版本是 1.8.6。
前言
基本上大部分sentinel的规则持久化都使用nacos做的,但是如果本身不想使用nacos,就为了sentinel的持久化而引入nacos,总让人不那么舒坦,本文摒弃以往的nacos方式,使用mysql进行持久化,持久化的规则有:授权规则、降级规则、流控规则、热点规则、系统规则。
一、下载代码
资源可以从这里下载,https://download.csdn.net/download/bacawa/87353077
代码调试不易,如果没有积分请私信我,我发你邮箱。
二、使用步骤
1.工程导入IDE
等待依赖包下载完成。
2. 创建数据库
数据库名称请查看 application.properties配置文件。
执行一下脚本,创建数据库表。也可以执行数据库脚本,脚本文件在工程
resource文件夹下面。
CREATE TABLE `cc_sentinel_rule` (
`rule_id` int(11) NOT NULL AUTO_INCREMENT,
`rule_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规则名称',
`rule_type` int(11) NOT NULL COMMENT '规则类型',
`app_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用名称',
`content` text COLLATE utf8mb4_unicode_ci COMMENT '规则内容',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`rule_id`),
UNIQUE KEY `udx_name_type` (`app_name`,`rule_type`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
3. 准备测试工程
提示:需要先准备一个测试工程,启动之后连接至sentinel。这个工程跟sentinel工程分开。
引入依赖包
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
配置可以参照一下配置,接口随便写一个,能测试即可。
#端口配置
server:
port: 8849
spring:
application:
name: HS
cloud:
sentinel:
transport:
dashboard: localhost:8080
eager: true
启动sentinel和测试工程,正常情况下可以看到如下页面。
可以通过sentinel界面添加一些规则,规则数据可以进入mysql进行持久化。
到此整个工程的改造就OK了。如果不想看原理,下面章节就可以忽略。
三、修改sentinel-dashboard源码
重点改造的代码在这个包下面。各位读者可以点进去详细阅读,大体就是5类规则的provider和publisher。
下来要同步修改controller层的代码
@Autowired
@Qualifier("flowRuleDatabaseProvider") //对应provider中的流控provider
private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
@Autowired
@Qualifier("flowRuleDatabasePublisher") //对应publisher中的流控publisher
private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;`
对应将这5个类同步修改下,切记,修改的时候要跟各自的provider和publisher对应起来。
最后一块就是数据库相关的改造代码
至此,sentinel的mysql持久化代码就完成了。
总结
本文基于最新的sentinel做了改造,使用mysql完成了规则数据的持久化,后续有时间,还要考虑将监控数据也进行mysql的持久化改造,敬请期待。
更多推荐
所有评论(0)