提示:本文使用的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的持久化改造,敬请期待。

GitHub 加速计划 / sentine / Sentinel
22.24 K
7.98 K
下载
alibaba/Sentinel: Sentinel 是阿里巴巴开源的一款面向分布式服务架构的流量控制、熔断降级组件,提供实时监控、限流、降级和系统保护功能,适用于微服务治理场景。
最近提交(Master分支:3 个月前 )
195150bc * fix issue 2485 which occur oom when using async servlet request. * optimize imports * 1. fix the same issue in the webmvc-v6x 2. improve based on review comments 2 个月前
b78b09d3 2 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐