springcloudalibaba~~sentinel持久化

本文详细介绍了如何将Sentinel与Nacos集成,实现配置和服务治理的持久化。首先,通过在service-provider-alibaba-sentinel9010模块中引入Nacos依赖,并配置相关YAML文件,使得Sentinel可以从Nacos获取流控规则。然后,通过修改Sentinel Dashboard的源码,实现了从控制台更新流控规则并同步到Nacos的功能。这种方式使得规则变更能够实时生效,适用于生产环境的流控规则管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sentinel持久化

1、配置持久化

service-provider-alibaba-sentinel9010模块引入依赖pom

<!-- 配置成nacos作为数据源 -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

修改配置文件application.yml

spring:
  application:
    name: service-provider-alibaba-sentinel9010
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
      datasource:
        ds1: #名称,随意
          nacos:
            server-addr: localhost:8848 #sentinel地址
            data-id: sentinel #nacos里面配置文件的dataid
            group-id: DEFAULT_GROUP #nacos里面配置文件的groupid
            data-type: json #nacos里面配置文件的类型
            rule-type: flow

启动nacos服务,…/nacos/bin目录里面,双击startup.cmd启动nacos服务,添加配置文件
在这里插入图片描述

配置内容:

[
    {
        "resource":"hello",
        "limitApp":"default",
        "grade":1,
        "count":1,
        "strategy":0,
        "controlBehavior":0,
        "clusterMode":false
    }
]

启动sentinel服务java -jar sentinel-dashboard-1.8.0.jar

启动service-provider-alibaba-sentinel9010服务,调用http://localhost:9010/hello,发现会进行限流

这里所设置的是sentinel可以读取nacos里面的配置文件内容,也就是存储成为json格式的流控规则

2、流控规则持久化

在sentinel控制台更改流控规则,想要同步到nacos的话,需要更改sentinel-dashboard源码

下载源码:https://github.com/alibaba/Sentinel/releases/tag/v1.8.0下载Source code(zip)

idea打开源码

1、修改sentinel-dashboard模块依赖,将test注释掉

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
    <!-- <scope>test</scope>-->
</dependency>

2、打开文件src\main\webapp\resources\app\scripts\directives\sidebar\sidebar.html,将下图中的红线位置修改成dashboard.flow({app: entry.app})
在这里插入图片描述

3、将src\test\java\com\alibaba\csp\sentinel\dashboard\rule下的nacos复制到src\main\java\com\alibaba\csp\sentinel\dashboard\rule下
在这里插入图片描述

4、修改src\main\java\com\alibaba\csp\sentinel\dashboard\rule\nacos\NacosConfig.java文件

@Configuration
public class NacosConfig {

    @Bean
    public Converter<List<FlowRuleEntity>, String> flowRuleEntityEncoder() {
        return JSON::toJSONString;
    }

    @Bean
    public Converter<String, List<FlowRuleEntity>> flowRuleEntityDecoder() {
        return s -> JSON.parseArray(s, FlowRuleEntity.class);
    }

    @Bean
    public ConfigService nacosConfigService() throws Exception {
        Properties properties=new Properties();
        properties.put(PropertyKeyConst.SERVER_ADDR,"localhost:8848");//如果设置了namespace的话,将namespace添加进去
        return ConfigFactory.createConfigService(properties);
    }
}

5、修改src\main\java\com\alibaba\csp\sentinel\dashboard\controller\v2\FlowControllerV2.java文件

@RestController
@RequestMapping(value = "/v2/flow")
public class FlowControllerV2 {

    private final Logger logger = LoggerFactory.getLogger(FlowControllerV2.class);

    @Autowired
    private InMemoryRuleRepositoryAdapter<FlowRuleEntity> repository;

    @Autowired
    @Qualifier("flowRuleNacosProvider")//这里修改成flowRuleNacosProvider
    private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
    @Autowired
    @Qualifier("flowRuleNacosPublisher")//这里修改成flowRuleNacosPublisher
    private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;
    
    ....
}        

6、将sentinel-dashboard模块打包,java -jar运行

7、启动nacos服务,启动service-provider-alibaba-sentinel9010sentinel服务,并调用http://localhost:9010/hello

8、登录sentinel-dashboard控制台
在这里插入图片描述

登录nacos控制台
在这里插入图片描述

在这里插入图片描述

去sentinel控制台添加一个新的流控规则
在这里插入图片描述
在这里插入图片描述

会发现nacos里面也添加了配置,实现了持久化,可以把nacos也配置成数据库的形式来实现持久化

注意:生产模式慎用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值