Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步到Nacos

@Configuration

public class NacosConfig {

@Bean

public Converter<List, String> flowRuleEntityEncoder() {

return JSON::toJSONString;

}

@Bean

public Converter<String, List> flowRuleEntityDecoder() {

return s -> JSON.parseArray(s, FlowRuleEntity.class);

}

@Bean

public ConfigService nacosConfigService() throws Exception {

Properties properties = new Properties();

properties.put(PropertyKeyConst.SERVER_ADDR, “localhost”);

return ConfigFactory.createConfigService(properties);

}

}

如果用到了namespace隔离环境,可以在nacosConfigService方法中再加入配置,比如:properties.put(PropertyKeyConst.NAMESPACE, "130e71fa-97fe-467d-ad77-967456f2c16d");

第五步:实现Nacos的配置拉取。

@Component(“flowRuleNacosProvider”)

public class FlowRuleNacosProvider implements DynamicRuleProvider<List> {

@Autowired

private ConfigService configService;

@Autowired

private Converter<String, List> converter;

public static final String FLOW_DATA_ID_POSTFIX = “-sentinel”;

public static final String GROUP_ID = “DEFAULT_GROUP”;

@Override

public List getRules(String appName) throws Exception {

String rules = configService.getConfig(appName + FLOW_DATA_ID_POSTFIX, GROUP_ID, 3000);

if (StringUtil.isEmpty(rules)) {

return new ArrayList<>();

}

return converter.convert(rules);

}

}

  • getRules方法中的appName参数是Sentinel中的服务名称。

  • configService.getConfig方法是从Nacos中获取配置信息的具体操作。其中,DataId和GroupId分别对应客户端使用时候的对应配置。比如这里的例子对应了之前我们在《Sentinel使用Nacos存储规则》一文中的配置,具体如下:

spring.cloud.sentinel.datasource.ds.nacos.groupId=DEFAULT_GROUP

spring.cloud.sentinel.datasource.ds.nacos.dataId=${spring.application.name}-sentinel

注意:两边的DataId和GroupId必须对应上。

第六步:实现Nacos的配置推送。

@Component(“flowRuleNacosPublisher”)

public class FlowRuleNacosPublisher implements DynamicRulePublisher<List> {

@Autowired

private ConfigService configService;

@Autowired

private Converter<List, String> converter;

public static final String FLOW_DATA_ID_POSTFIX = “-sentinel”;

public static final String GROUP_ID = “DEFAULT_GROUP”;

@Override

public void publish(String app, List rules) throws Exception {

AssertUtil.notEmpty(app, “app name cannot be empty”);

if (rules == null) {

return;

}

configService.publishConfig(app + FLOW_DATA_ID_POSTFIX, GROUP_ID, converter.convert(rules));

}

}

  • 这里的大部分内容与上一步中的实现一致。主要就是Nacos中存储配置的DataId和GroupId不要弄错。

第七步:修改com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2DynamicRuleProviderDynamicRulePublisher注入的Bean,改为上面我们编写的针对Apollo的实现:

@Autowired

@Qualifier(“flowRuleNacosProvider”)

private DynamicRuleProvider<List> ruleProvider;

@Autowired

@Qualifier(“flowRuleNacosPublisher”)

private DynamicRulePublisher<List> rulePublisher;

最后,读者可以使用本文改造后的sentinel-dashboard联合之前《Sentinel使用Nacos存储规则》一文的例子来验证本文内容。

代码示例


本文介绍内容的客户端代码,示例读者可以通过查看下面仓库中的alibaba-sentinel-dashboard-nacos项目:

如果您对这些感兴趣,欢迎star、follow、收藏、转发给予支持!

系列回顾


最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值