动态规则配置:从硬编码到配置中心

引言:硬编码规则的痛点 在前面的文章中,我们一直使用硬编码的方式配置Sentinel规则: @PostConstruct public void initFlowRule() { List<FlowRule> rules = new ArrayList<>(); FlowRule rule = new FlowRule(); rule.setResource("orderCreate"); rule.setCount(1000); // ← 硬编码在代码中 rules.add(rule); FlowRuleManager.loadRules(rules); } 硬编码规则的问题: 无法动态调整:修改限流阈值需要重新部署 无法统一管理:每个服务都要单独配置 无法应对突发情况:流量激增时无法快速调整 配置不可追溯:不知道谁在什么时候改了配置 解决方案:将规则配置到配置中心(如Nacos、Apollo),实现动态更新。 规则持久化的三种模式 1. 原始模式(内存模式) 特点: 规则存储在内存中 应用重启后规则丢失 Dashboard推送规则,应用无法持久化 问题:无法持久化,生产环境不推荐。 2. Pull模式(定时拉取) 工作流程: 应用启动 ↓ 定时从配置中心拉取规则(如每30秒) ↓ 更新内存中的规则 ↓ 继续定时拉取 优点:实现简单 缺点:实时性差,可能延迟30秒 3. Push模式(推送模式) 工作流程: Dashboard修改规则 ↓ 推送到配置中心(如Nacos) ↓ 配置中心通知所有订阅的应用 ↓ 应用实时更新规则 优点:实时性高(秒级) 缺点:实现复杂 推荐:生产环境使用Push模式 + Nacos。 Nacos配置中心集成(Push模式) 第一步:添加依赖 <!-- Sentinel Nacos数据源 --> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> <version>1.8.6</version> </dependency> <!-- Nacos客户端 --> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>2.2.0</version> </dependency> 第二步:配置application.yml spring: application: name: order-service cloud: sentinel: transport: dashboard: localhost:8080 datasource: # 流控规则 flow: nacos: server-addr: localhost:8848 dataId: ${spring.application.name}-flow-rules groupId: SENTINEL_GROUP rule-type: flow data-type: json # 熔断规则 degrade: nacos: server-addr: localhost:8848 dataId: ${spring.application.name}-degrade-rules groupId: SENTINEL_GROUP rule-type: degrade data-type: json # 系统保护规则 system: nacos: server-addr: localhost:8848 dataId: ${spring.application.name}-system-rules groupId: SENTINEL_GROUP rule-type: system data-type: json 第三步:在Nacos中配置规则 登录Nacos控制台(http://localhost:8848/nacos): ...

2025-11-20 · maneng

如约数科科技工作室

浙ICP备2025203501号

👀 本站总访问量 ...| 👤 访客数 ...| 📅 今日访问 ...