千家信息网

如何使用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的依赖,将test注释掉,这样才能在主程序中使用。

    com.alibaba.csp    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中的默认DynamicRuleProviderDynamicRulePublisher修改为:

    @Autowired@Qualifier("flowRuleNacosProvider")private DynamicRuleProvider> ruleProvider;@Autowired@Qualifier("flowRuleNacosPublisher")private DynamicRulePublisher> rulePublisher;
    private void publishRules(/*@NonNull*/ String app) throws Exception {    List rules = 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 阿里云高防服务器多少钱一个月 知名三星手机服务器租用 企业管理服务器是什么部门 广州伟宏网络技术有限公司 显示服务器无响应 清除服务器经验球指令 核心节点数据库系统重大故障 小学网络安全重大事项报告制度 阿里云高防服务器多少钱一个月 咪咕音乐网络安全 榆林软件开发有限公司在线咨询
    0