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

第四步:创建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;

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

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。

Mybatis源码解析

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。

Mybatis源码解析

[外链图片转存中…(img-goZaiu8F-1712072087762)]

[外链图片转存中…(img-g6NXKq1X-1712072087762)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值