首页
/ 【亲测免费】 Sentinel 1.8.6 使用 MySQL 进行规则持久化

【亲测免费】 Sentinel 1.8.6 使用 MySQL 进行规则持久化

2026-01-23 06:30:49作者:范垣楠Rhoda

本文介绍如何在 Sentinel 1.8.6 版本中使用 MySQL 数据库进行规则持久化。相较于传统的 Nacos 方式,使用 MySQL 进行持久化可以更好地满足特定场景下的需求。本文将详细讲解如何配置和使用 MySQL 来持久化 Sentinel 的规则,包括授权规则、降级规则、流控规则、热点规则和系统规则。

背景

在微服务架构中,Sentinel 是一个强大的流量控制和熔断降级工具。为了确保规则的持久性和可靠性,通常需要将规则持久化到外部存储中。本文将介绍如何使用 MySQL 数据库来实现这一目标。

实现步骤

1. 引入依赖

首先,需要在项目的 pom.xml 文件中引入必要的依赖,包括 Sentinel 和 MySQL 驱动。

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-extension</artifactId>
    <version>1.8.6</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>

2. 配置数据源

application.ymlapplication.properties 文件中配置 MySQL 数据源信息。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/sentinel_db?useSSL=false&serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

3. 创建数据库表

在 MySQL 数据库中创建相应的表结构,用于存储 Sentinel 的规则。以下是各个规则对应的表结构示例:

  • 授权规则表
CREATE TABLE `auth_rule` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `resource` VARCHAR(255) NOT NULL,
  `limit_app` VARCHAR(255) NOT NULL,
  `strategy` INT NOT NULL,
  PRIMARY KEY (`id`)
);
  • 降级规则表
CREATE TABLE `degrade_rule` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `resource` VARCHAR(255) NOT NULL,
  `grade` INT NOT NULL,
  `count` DOUBLE NOT NULL,
  `time_window` INT NOT NULL,
  PRIMARY KEY (`id`)
);
  • 流控规则表
CREATE TABLE `flow_rule` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `resource` VARCHAR(255) NOT NULL,
  `grade` INT NOT NULL,
  `count` DOUBLE NOT NULL,
  `control_behavior` INT NOT NULL,
  PRIMARY KEY (`id`)
);
  • 热点规则表
CREATE TABLE `param_flow_rule` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `resource` VARCHAR(255) NOT NULL,
  `grade` INT NOT NULL,
  `count` DOUBLE NOT NULL,
  `param_idx` INT NOT NULL,
  PRIMARY KEY (`id`)
);
  • 系统规则表
CREATE TABLE `system_rule` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `resource` VARCHAR(255) NOT NULL,
  `grade` INT NOT NULL,
  `count` DOUBLE NOT NULL,
  PRIMARY KEY (`id`)
);

4. 配置 Sentinel 数据源

在 Spring Boot 配置类中配置 Sentinel 的数据源,使其与 MySQL 数据库关联。

@Configuration
public class SentinelConfig {

    @Bean
    public DataSource dataSource() {
        return DataSourceBuilder.create()
                .url("jdbc:mysql://localhost:3306/sentinel_db?useSSL=false&serverTimezone=UTC")
                .username("root")
                .password("root")
                .driverClassName("com.mysql.cj.jdbc.Driver")
                .build();
    }

    @Bean
    public RuleRepository ruleRepository(DataSource dataSource) {
        return new JdbcRuleRepository(dataSource);
    }

    @Bean
    public SentinelDataSource sentinelDataSource(RuleRepository ruleRepository) {
        return new SentinelDataSource(ruleRepository);
    }
}

5. 使用规则

配置完成后,Sentinel 将自动从 MySQL 数据库中加载规则,并在应用中生效。你可以通过 Sentinel 控制台或直接操作数据库来管理这些规则。

总结

通过本文的介绍,你已经了解了如何在 Sentinel 1.8.6 中使用 MySQL 进行规则持久化。这种方式不仅提高了规则的持久性和可靠性,还为规则的管理提供了更多的灵活性。希望本文对你在实际项目中的应用有所帮助。

登录后查看全文
热门项目推荐
相关项目推荐