Sentinel 规则持久化(Nacos + InitFunc)

发布时间:2026/10/7 20:31:37
Sentinel 规则持久化(Nacos + InitFunc) 文章目录Sentinel 规则持久化Nacos InitFunc流程概览一、引入依赖二、order-service 重写 InitFunc2.1 NacosDataSourceInit.java2.2 SPI 注册必须2.3 InitFunc 代码参数说明三、Nacos 控制台配置3.1 新建配置项3.2 配置内容 JSON 示例3.3 JSON 字段说明FlowRule四、重启服务验证五、单向传递参考官方文档Sentinel 规则持久化Nacos InitFunc基于spring-cloud-demo· order-service · Nacos 存规则重启不丢失流程概览① pom 引入 sentinel-datasource-nacos ② order-service 实现 InitFunc SPI 注册 ③ Nacos 控制台新建配置JSON ④ 重启 order-service → 加载规则Nacos 改 JSON 后客户端自动刷新一、引入依赖spring-cloud-starter-alibaba-sentinel不含Nacos 数据源须额外加!-- Sentinel 客户端 --dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId/dependency!-- 从 Nacos 读规则InitFunc 方式必需 --dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-nacos/artifactId/dependency二、order-service 重写 InitFunc2.1 NacosDataSourceInit.javapackagecom.emrys.order.config.datasource;importcom.alibaba.csp.sentinel.datasource.ReadableDataSource;importcom.alibaba.csp.sentinel.datasource.nacos.NacosDataSource;importcom.alibaba.csp.sentinel.init.InitFunc;importcom.alibaba.csp.sentinel.slots.block.flow.FlowRule;importcom.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;importcom.alibaba.fastjson.JSON;importjava.util.List;publicclassNacosDataSourceInitimplementsInitFunc{Overridepublicvoidinit()throwsException{finalStringremoteAddress127.0.0.1:8848;// Nacos 地址 host:portfinalStringgroupIdSentinel:Demo;// 与 Nacos Group 一致finalStringdataIdcom.alibaba.csp.sentinel.demo.flow.rule;// 与 Nacos DataId 一致ReadableDataSourceString,ListFlowRuleflowRuleDataSourcenewNacosDataSource(remoteAddress,groupId,dataId,source-JSON.parseArray(source,FlowRule.class));// 配置内容为 JSON 数组FlowRuleManager.register2Property(flowRuleDataSource.getProperty());// 启动时从 Nacos 加载规则以后 Nacos 改 JSONProperty 变化 → FlowRuleManager 自动换规则不用重启。}}2.2 SPI 注册必须路径src/main/resources/META-INF/services/com.alibaba.csp.sentinel.init.InitFunc内容一行全限定类名com.emrys.order.config.datasource.NacosDataSourceInit无此文件init()不会执行。2.3 InitFunc 代码参数说明变量说明本示例值remoteAddressNacos 地址127.0.0.1:8848groupIdNacos 配置 GroupSentinel:DemodataIdNacos 配置 DataIdcom.alibaba.csp.sentinel.demo.flow.rule解析器配置体格式JSON.parseArray→JSON 数组三、Nacos 控制台配置登录 Nacos →配置管理→配置列表→新建配置。3.1 新建配置项字段填什么Data IDcom.alibaba.csp.sentinel.demo.flow.rule与 InitFunc 中dataId一致GroupSentinel:Demo与 InitFunc 中groupId一致配置格式JSONInitFunc 用parseArray解析勿选 YAML配置内容见下方 JSON 示例3.2 配置内容 JSON 示例空规则先验证连通[]流控示例限order-service-printQPS1[{resource:order-service-print,limitApp:default,grade:1,count:1,strategy:0,controlBehavior:0,clusterMode:false}]3.3 JSON 字段说明FlowRuleJSON 字段含义示例resource资源名与簇点链路一致order-service-print或/order/readlimitApp针对来源default表示不区分defaultgrade阈值类型0 并发线程数1 QPS1count单机阈值1strategy流控模式0 直接1 关联2 链路0controlBehavior流控效果0 快速失败1 预热2 排队0clusterMode是否集群模式false四、重启服务验证Nacos 发布上述 JSON 配置重启order-service连续访问/order/read两次资源经order-service-printQPS1 时第二次应被限流再次重启order-service限流仍生效 → 持久化成功Nacos 中修改 JSON 发布后客户端会通过 Nacos 监听自动刷新规则一般无需重启。五、单向传递上述持久化数据只能从Nacos传出,不能在DashBoard控制台传输到Nacos,要想双向传输,需要更改DashBoard的jar包内容.参考官方文档动态规则扩展 · Sentinel WikiSentinel 进阶指南 · 动态数据源

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询