com.alibaba.csp
sentinel-datasource-nacos
原来的test去掉
自定义规则数据持久化
将项目测试下面的代码移动到正式代码里。如
添加com.taobao.csp.sentinel.dashboard.config.NacosConfig的配置
@Bean
public Converter> systemRuleEntityDecoder() {
return s -> JSON.parseArray(s, SystemRuleEntity.class);
}
@Bean
public ConfigService nacosConfigService() throws Exception {
Properties properties = new Properties();
properties.put("serverAddr",address);
// 命名空间暂时不用,还是使用默认的public,
// 因为客服端sentinel-datasource-nacos的jar包目前只能设置地址,还不能设置命名空间
// properties.put("namespace","938ed9f5-b24b-4491-a41c-a2560dc42919");
return ConfigFactory.createConfigService(properties);
}
添加com.taobao.csp.sentinel.dashboard.config.NacosConfigUtil的配置
主要是一些静态属性添加,目前添加了限流文件和系统规则文件。
持久化限流规则接口重新实现
a) 推送数据
@Component("flowRuleNacosPublisher")
public class FlowRuleNacosPublisher implements DynamicRulePublisher> {
@Autowired
private ConfigService configService;
@Autowired
private Converter>,String> convert;
@Override
public void publish(String app, List rules) throws Exception {
AssertUtil.notEmpty(app, "app name cannot be empty");
if (rules == null) {
return;
}
List> ruleList= new ArrayList<>();
rules.forEach(obj->{
Map map = new HashMap<>();
map.put("resource",obj.getResource());
map.put("controlBehavior",obj.getControlBehavior());
map.put("count",obj.getCount());
map.put("grade",obj.getGrade());
map.put("limitApp",obj.getLimitApp());
map.put("strategy",obj.getStrategy());
ruleList.add(map);
});
configService.publishConfig(app+NacosConfigUtil.FLOW_DATA_ID_POSTFIX,NacosConfigUtil.GROUP_ID,convert.convert(ruleList));
}
}
b) 从nacos获取数据
@Component("flowRuleNacosProvider")
public class FlowRuleNacosProvider implements DynamicRuleProvider> {
@Autowired
private ConfigService configService;
@Autowired
private Converter> converter;
@Override
public List getRules(String appName) throws Exception {
String rules = configService.getConfig(appName + NacosConfigUtil.FLOW_DATA_ID_POSTFIX,
NacosConfigUtil.GROUP_ID, 3000);
if (StringUtil.isEmpty(rules)) {
return new ArrayList<>();
}
return converter.convert(rules);
}
}
c) 修改com.taobao.csp.sentinel.dashboard.view.FlowControllerV2
系统规则的修改与上面限流规则修改差多。
系统监控的数据持久化采(采用mysql+jpa)
1) 添mysql和jpa所需要的jar包
mysql
mysql-connector-java
8.0.11
org.springframework.boot
spring-boot-starter-data-jpa
2.0.4.RELEASE
2) application.properties文件的修改
spring.datasource.url=jdbc:mysql://localh