SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源

原始的客户端是将熔断规则保存在内存中,一旦客户端重启,熔断规则将全部丢失。上一篇博客介绍了Sentinel客户端配置Nacos数据源,熔断规则持久化到Nacos中。客户端启动时,从Nacos数据源中加载熔断规则,并且会监听Nacos数据源中规则的变化,一旦Nacos中的规则改变,Sentinel客户端也会随之改变。从而,重启后,客户端之前的熔断规则不会丢失,实现熔断规则持久化。

但是Nacos中的规则需要我们手动添加,这样很不方便。通常,我们是在Sentinel控制台添加熔断规则,所以,我们接下来需要做的是,Sentinel控制台 将熔断规则推送到Nacos数据源。下面开始介绍控制台代码修改:

 下载控制台源码

目前release最新的是1.5.1版本,下载完成后解压后目录如下:其中的dashboard就是控制台源码

SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源_第1张图片

导入eclipse,以maven工程导入 

导入后目录如下:一共有五个位置的文件需要修改

 SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源_第2张图片

修改代码 

 启动控制台和客户端工程

  1. 修改pom文件:
    在pom文件中找到Nacos的依赖,将scope注释掉
    SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源_第3张图片
  2. 修改配置类:
    将Nacos配置类以及工具类复制到com.alibaba.csp.sentinel.dashboard.config包下
    SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源_第4张图片SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源_第5张图片
  3. 修改NacosConfig类,修改NacosIP地址
    SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源_第6张图片
  4. 将Nacos数据源的Push和Provide类移动到com.alibaba.csp.sentinel.dashboard.rule包下
    SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源_第7张图片SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源_第8张图片
  5. 修改Controller包下的FlowControllerV1
    SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源_第9张图片
    自动注入provider和publisher
    SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源_第10张图片
    该类最后的publishRules方法修改如下:
        private boolean publishRules(String app, String ip, Integer port) {
            List rules = repository.findAllByMachine(MachineInfo.of(app, ip, port));
            try {
    			publisher.publish(app, rules);
    			logger.info("添加限流规则成功{}",JSON.toJSONString(rules.stream().map(FlowRuleEntity::toFlowRule).collect(Collectors.toList())));
    			return true;
    		} catch (Exception e) {
    			logger.info("添加限流规则失败{}",JSON.toJSONString(rules.stream().map(FlowRuleEntity::toFlowRule).collect(Collectors.toList())));
    			e.printStackTrace();
    			return false;
    		}
    //        return sentinelApiClient.setFlowRuleOfMachine(app, ip, port, rules);
        }

     

  6. 启动Sentinel控制台和Sentinel客户端,本文的客户端工程就是上一篇博客中搭建的,只是修改了配置文件:
    SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源_第11张图片

  7.  

测试 

  •  访问http://localhost:8080/可以进入到控制台界面,但是界面上没有任何的客户端
  • 请求一次http://localhost:8090/hello/xjl,等一会儿,刷新一下就可以看到客户端了
  • SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源_第12张图片
  • 添加流控规则,
  • SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源_第13张图片

 

  • 并刷新一下就可以看到我们添加的规则了 
  • 请求改路径,并快速刷新,就可以看到熔断界面吗,至此,我们完成了他修改控制台代码,实现控制台添加流控规则,推送到Nacos数据源
  • SpringCloud Alibaba Sentinel限流熔断降级(五)--------------控制台推送限流规则到Nacos数据源_第14张图片

你可能感兴趣的:(springcloud,alibaba)