Sentinel本身不支持持久化,项目通过下载源码改造后,将规则配置持久化进nacos中,sentinel重启后,配置不会丢失。
接着我们就要改造Sentinel的源码。因为官网提供的Sentinel的jar是原始模式的,所以需要改造,所以我们需要拉取源码下来改造一下,然后自己编译jar包。
源码地址:https://github.com/alibaba/Sentinel
拉取下来之后,导入到IDEA中,然后我们可以看到以下目录结构。
首先修改sentinel-dashboard的pom.xml文件:
第二步,把test目录下的四个关于Nacos关联的类,移到rule目录下。
接着NacosConfig添加Nacos的地址配置。
最关键的是FlowControllerV1的改造,这是规则配置的增删改查的一些接口。
把移动到rule目录下的两个服务,添加到FlowControllerV1类中。
@Autowired
@Qualifier("flowRuleNacosProvider")
private DynamicRuleProvider> ruleProvider;
@Autowired
@Qualifier("flowRuleNacosPublisher")
private DynamicRulePublisher> rulePublisher;
添加私有方法publishRules(),用于推送配置:
private void publishRules(/*@NonNull*/ String app) throws Exception {
List
rulePublisher.publish(app, rules);
}
修改apiQueryMachineRules()方法。
修改apiAddFlowRule()方法。
修改apiUpdateFlowRule()方法。
修改apiDeleteFlowRule()方法。
Sentinel控制台的项目就改造完成了,用于生产环境就编译成jar包运行,如果是学习可以直接在IDEA运行。
附件包含已经改造好的包,直接修改配置文件中nacos的配置即可使用。
spring:
cloud:
sentinel:
enabled: true # 是否开启。默认为 true 开启
eager: true # 是否饥饿加载。默认为 false 关闭
transport:
#配置sentinel地址,端口
dashboard: 127.0.0.1:8080 #这里是sentinel控制台地址
#客户端IP(sentinel dashboard进行实时监控的主机ip地址)
# 默认端口8719端口假如被占用会自动从8719开始依次+1扫描,直到找到未被占用的端口
port: 8725
# client-ip: 192.168.30.200 #这里是我windows地址
datasource:
flow:
nacos:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
namespace: sentinel_rule
dataId: cai-demo-flow-rules
groupId: SENTINEL_GROUP
# 规则类型,取值见:
# org.springframework.cloud.alibaba.sentinel.datasource.RuleType
rule-type: flow
data-type: json
至此,单机模式集成完成
集群只需要修改客户端即可:
添加集群pom:
添加InitFunc实现类(在sentinel源码demo可以找到)
继续添加实体类和常量类:
在resource中添加sentinel.properties配置文件(主要解决DemoClusterInitFunc类中无法读取配置文件的问题)
继续添加SPI文件
至此集群改造完成