使用Gateway网关配合sentinel-dashboard使用nacos同步数据-打docker镜像

30 篇文章 0 订阅
27 篇文章 0 订阅

使用Gateway网关配合sentinel-dashboard使用nacos同步数据-打docker镜像

  1. 克隆sentinel-dashboard到本地:https://github.com/alibaba/Sentinel/

  2. 开始修改代码:

    1. 修改pom.xml中的sentinel-datasource-nacos的依赖,将<scope>test</scope>注释掉,这样才能在主程序中使用。

      <dependency>
          <groupId>com.alibaba.csp</groupId>
          <artifactId>sentinel-datasource-nacos</artifactId>
          <!--<scope>test</scope>-->
      </dependency>
      
    2. 展开test->java->com.alibaba.csp.sentinel.dashboard->rule->nacos

      复制NacosConfig到src->java->com.alibaba.csp.sentinel.dashboard->config

      复制其余3个文件到src->java->com.alibaba.csp.sentinel.dashboard->rule

    3. 修改NacosConfig 代码

        @Value("${spring.cloud.sentinel.datasource.ds.nacos.serverAddr}")
        private String serverAddr;
      
        @Bean
        public ConfigService nacosConfigService() throws Exception {
          return ConfigFactory.createConfigService(serverAddr);
        }
      
      spring.cloud.sentinel.datasource.ds.nacos.serverAddr=172.****:8850
      spring.cloud.sentinel.datasource.ds.nacos.dataId=nocov-cloud-gateway-sentinel-flow-rules.properties
      spring.cloud.sentinel.datasource.ds.nacos.groupId=SENTINEL_GROUP
      
    4. 修改FlowRuleNacosProvider代码

        @Value("${spring.cloud.sentinel.datasource.ds.nacos.dataId}")
        private String dataId;
      
        @Value("${spring.cloud.sentinel.datasource.ds.nacos.groupId}")
        private String groupId;
      
        @Override
        public List<FlowRuleEntity> getRules(String appName) throws Exception {
          String rules = configService.getConfig(dataId, groupId, 3000);
          if (StringUtil.isEmpty(rules)) {
            return new ArrayList<>();
          }
          return converter.convert(rules);
        }
      
    5. 修改FlowRuleNacosPublisher代码

        @Value("${spring.cloud.sentinel.datasource.ds.nacos.dataId}")
        private String dataId;
      
        @Value("${spring.cloud.sentinel.datasource.ds.nacos.groupId}")
        private String groupId;
      
        @Override
        public void publish(String app, List<FlowRuleEntity> rules) throws Exception {
          AssertUtil.notEmpty(app, "app name cannot be empty");
          if (rules == null) {
            return;
          }
          configService.publishConfig(dataId, groupId, converter.convert(rules));
        }
      
    6. 注意:

      1. 同时Nacos中应该有如下配置:

      在这里插入图片描述

      1. 网关配置:
            datasource:
              ds:
                nacos:
                  server-addr: ${spring.cloud.nacos.discovery.server-addr}
                  data-id: nocov-cloud-gateway-sentinel-flow-rules.properties
                  namespace:
                  group-id: SENTINEL_GROUP
                  data-type: json
                  # 限流
                  rule-type: flow
      
    7. 打开src->java->com.alibaba.csp.sentinel.dashboard->controller->v2->FlowControllerV2

      @Qualifier(“flowRuleDefaultProvider”) 改为 @Qualifier(“flowRuleNacosProvider”)

      @Qualifier(“flowRuleDefaultPublisher”) 改为 @Qualifier(“flowRuleNacosPublisher”)

    8. 打开src->webapp->resources->app->scripts->directives->sidebar->sidebar.html

      <li ui-sref-active="active" ng-if="entry.isGateway">
        	<a ui-sref="dashboard.flow({app: entry.app})">
          <i class="glyphicon glyphicon-filter"></i>&nbsp;&nbsp;流控规则 V2</a>
      </li>
      

      注意:请仔细查看流控规则,只留一个即可。「因为我使用了Gateway 的sentinel 所以使用entry.isGateway」

    9. 通过sentinel-dashboard项目打开Terminal,输入

      mvn clean package
      

      成功打出Jar包,如果报错:缺少其他Jar,请先在缺少的Jar项目名称下install后在运行命令;

  3. 完成之后:
    在这里插入图片描述

  4. 发现问题:sentinel使用nacos保存数据时,无法设置数据格式,所以每次在sentinel上修改流控规则后,nacos中的“配置格式”为无,
    在这里插入图片描述

    查看了比较浅的源码:发现无法自定义配置格式。

    但总体不影响使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值