如何使用Sentinel Dashboard动态推把数据同步到Nacos
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要讲解了"如何使用Sentinel Dashboard动态推把数据同步到Nacos",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用Se
千家信息网最后更新 2025年01月23日如何使用Sentinel Dashboard动态推把数据同步到Nacos
这篇文章主要讲解了"如何使用Sentinel Dashboard动态推把数据同步到Nacos",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用Sentinel Dashboard动态推把数据同步到Nacos"吧!
准备工作:
下载Sentinel Dashboard的release版本。地址:https://github.com/alibaba/Sentinel/releases
一 :修改pom.xml
中的sentinel-datasource-nacos的依赖,将
注释掉,这样才能在主程序中使用。
|
二:找到resources/app/scripts/directives/sidebar/sidebar.html
中的这段代码:
修改为:
这样修改之后就会跳转到FlowControllerV2的接口。
三:再项目com.alibaba.csp.sentinel.dashboard中新建一个nacos包来实现扩展功能。
@Component@ConfigurationProperties(prefix = "nacos.server")public class NacosConfigProperties { private String ip; private String port; private String namespace; private String groupId; public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getPort() { return port; } public void setPort(String port) { this.port = port; } public String getNamespace() { return namespace; } public void setNamespace(String namespace) { this.namespace = namespace; } public String getGroupId() { return groupId; } public void setGroupId(String groupId) { this.groupId = groupId; } public String getServerAddr() { return this.getIp()+":"+this.getPort(); } @Override public String toString() { return "NacosConfigProperties [ip=" + ip + ", port=" + port + ", namespace=" + namespace + ", groupId=" + groupId + "]"; }}
public final class NacosConfigConstant { public static final String FLOW_DATA_ID_POSTFIX = "-sentinel-flow"; public static final String GROUP_ID = "DEFAULT_GROUP";}
@Configurationpublic class NacosConfig { @Autowired private NacosConfigProperties nacosConfigProperties; /** * 非常关键 这里将FlowRuleEntity转换成FlowRule才会对客户端生效 * @return FlowRule */ @Bean public Converter, String> flowRuleEntityEncoder() { return rules -> JSON.toJSONString(rules.stream().map(FlowRuleEntity::toRule).collect(Collectors.toList()), true); } @Bean public Converter
> flowRuleEntityDecoder() { return s -> JSON.parseArray(s, FlowRuleEntity.class); } @Bean public ConfigService nacosConfigService() throws Exception { Properties properties = new Properties(); properties.put(PropertyKeyConst.SERVER_ADDR, nacosConfigProperties.getServerAddr()); properties.put(PropertyKeyConst.NAMESPACE, nacosConfigProperties.getNamespace()); return ConfigFactory.createConfigService(properties); }}
四:编写动态推拉模式的扩展代码
@Component("flowRuleNacosProvider")public class FlowRuleNacosProvider implements DynamicRuleProvider> { private static Logger logger = LoggerFactory.getLogger(FlowRuleNacosProvider.class); @Autowired private NacosConfigProperties nacosConfigProperties; @Autowired private ConfigService configService; @Autowired private Converter
> converter; @Override public List getRules(String appName) throws Exception { String rules = configService.getConfig(appName + NacosConfigConstant.FLOW_DATA_ID_POSTFIX, nacosConfigProperties.getGroupId(), 3000); logger.info("从Nacos中拉取到限流规则信息:{}",rules); if (StringUtil.isEmpty(rules)) { return new ArrayList<>(); } return converter.convert(rules); }}
@Component("flowRuleNacosPublisher")public class FlowRuleNacosPublisher implements DynamicRulePublisher> { @Autowired private NacosConfigProperties nacosConfigProperties; @Autowired private ConfigService configService; @Autowired private Converter
, String> converter; @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 + NacosConfigConstant.FLOW_DATA_ID_POSTFIX, nacosConfigProperties.getGroupId(), converter.convert(rules)); }}
五:然后将FlowControllerV2中的默认DynamicRuleProvider
和DynamicRulePublisher
修改为:
@Autowired@Qualifier("flowRuleNacosProvider")private DynamicRuleProvider> ruleProvider;@Autowired@Qualifier("flowRuleNacosPublisher")private DynamicRulePublisher
> rulePublisher;
private void publishRules(/*@NonNull*/ String app) throws Exception { Listrules = repository.findAllByApp(app); rulePublisher.publish(app, rules); logger.info("添加限流规则成功{}", JSON.toJSONString(rules.stream().map(FlowRuleEntity::toRule).collect(Collectors.toList()), true));}
六:application.properties配置文件
#nacosnacos.server.ip=localhostnacos.server.port=8848nacos.server.namespace=nacos.server.group-id=DEFAULT_GROUP
感谢各位的阅读,以上就是"如何使用Sentinel Dashboard动态推把数据同步到Nacos"的内容了,经过本文的学习后,相信大家对如何使用Sentinel Dashboard动态推把数据同步到Nacos这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
动态
数据
同步
规则
学习
代码
内容
成功
主程序
信息
关键
功能
地址
客户
客户端
就是
思路
情况
接口
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
天津嵌入式软件开发招聘
软件开发工程师的压力
国内外临床试验研究数据库
归家推进网络安全
宁波虎哥哥网络技术有限公司
软件开发类的国企
两个数据库的数据读写
网络安全的调研方法
滁州网络安全考试费用
数据库数值求最大值
无锡lenovo服务器维修中心
实用网络技术期末试题及答案
山东智炬网络技术有限公司
服务器类似于
软件开发应用技术排名
酒泉多媒体软件开发公司
acfun被关闭服务器
数据库的数据内容个人基本信息表
服务器访问异常429
阿里云高防服务器多少钱一个月
知名三星手机服务器租用
企业管理服务器是什么部门
广州伟宏网络技术有限公司
显示服务器无响应
清除服务器经验球指令
核心节点数据库系统重大故障
小学网络安全重大事项报告制度
阿里云高防服务器多少钱一个月
咪咕音乐网络安全
榆林软件开发有限公司在线咨询