spring cloud alibaba系列sentinel规则持久化


“秋来相顾尚飘蓬,未就丹砂愧葛洪。
痛饮狂歌空度日,飞扬跋扈为谁雄”


总结

我上一篇:spring cloud alibaba sentinel
介绍的sentinel可以定义很多的规则,但这些规则都是存在内存中的,下次重启服务,规则就消失了,这肯定是不能在生产环境中使用的,所以我们需要对规则进行持久化。
还没开始,就已经结束。。。翻了很多资料,发现好像最好的办法就是使用阿里提供的在线托管Sentinel控制台(AHAS),果然花钱能解决很多问题
下面搞搞不花钱的

官方文档:生产环境使用sentinel
文档介绍了各种推送模式,以及可以用什么实现,实现代码只是提了一些关键的地方。我这里就不用进行复制粘贴了吧,官网肯定比我写得好,网上基本上都是复制粘贴的官网信息

使用nacos持久化规则

微服务进行改造

  • 加依赖
<dependency>
   <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
    <version>1.7.2</version>
</dependency>
  • 加配置
    添加sentinel.datasource的配置
spring:
  application:
    name: ts-customer
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: ${settings.nacos.addr}
        namespace: ${settings.nacos.namespace.${spring.profiles.active}}
        file-extension: yaml
        shared-configs: shareConfig.yaml
        refresh-enabled: true
#        extension-configs:
#          dataId:
#          group:
#          refresh: true

      discovery:
        server-addr: ${settings.nacos.addr}
        namespace: ${settings.nacos.namespace.${spring.profiles.active}}
    sentinel:
      transport:
        dashboard: ${settings.sentinel.dashboard}
      datasource:
        flow:     #这个名称可以随便取
          nacos:    #限流持久配置
            server-addr: ${settings.nacos.addr}    #使用nacos的持久
            dataId: ${spring.application.name}-flow-rules   #获取限流的数据源的dataId
            groupId: DEFAULT_GROUP
            rule-type: flow
            dataType: json
        degrade:
          nacos:    #降级持久配置
            server-addr: ${settings.nacos.addr}
            dataId: ${spring.application.name}-degrade-rules
            groupId: SENTINEL_GROUP
            rule-type: degrade
        system:
          nacos:
            server-addr: ${settings.nacos.addr}
            dataId: ${spring.application.name}-system-rules
            groupId: SENTINEL_GROUP
            rule-type: system
        authority:
          nacos:
            server-addr: ${settings.nacos.addr}
            dataId: ${spring.application.name}-authority-rules
            groupId: SENTINEL_GROUP
            rule-type: authority
        param-flow:
          nacos:
            server-addr: ${settings.nacos.addr}
            dataId: ${spring.application.name}-param-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: param-flow
            
##### nacos配置参数   ####
settings:
  nacos:
    addr: 192.168.31.37:38001
    namespace:
      dev: 190bfcff-e39e-42d7-ae87-af2690a4d409
  sentinel:
    dashboard: 192.168.31.37:8808

每个配置,对应控制台的各种规则

  • nacos添加配置
    在这里插入图片描述
    在服务的运行日志中我们可以看见他推送了该配置到sentinel
    然后在sentinel dashboard中可以看见我们定义的规则,但是如果我们在控制台修改了该规则是没有作用的,因为他不会推送到nacos配置中心,所有如果这样搞,那么sentinel控制台的作用就仅仅是一个展示,而且每个需要配置规则的资源,都需要我们自己去配置中心件文件,加配置,十分的麻烦。比较好的是规则我们都可以定义,想不花钱的话,就只有这样
    所以我们要尝试修改sentinel控制台代码
  • 改造控制台

这里使用push模式,其他模式可参考:https://www.cnblogs.com/fx-blog/p/11726189.html
下载sentinel-dashboard源码: https://github.com/alibaba/Sentinel/releases
在这里插入图片描述
修改pom

<!-- for Nacos rule publisher sample -->
  <dependency>
      <groupId>com.alibaba.csp</groupId>
      <artifactId>sentinel-datasource-nacos</artifactId>
  </dependency>

将test去掉,让配置不仅在测试时生效
然后将test的rule目录下的nacos文件复制到rule目录下
在这里插入图片描述
然后修改controller/v2目录下的FlowControllerV2
修改Qualifier注解,原来是defalt,改为nacos


@Autowired
@Qualifier("flowRuleNacosProvider")
private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
@Autowired
@Qualifier("flowRuleNacosPublisher")
private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;

然后修改src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html
将注释放开

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

最后修改src/main/webapp/resources/app/scripts/controllers/identity.js
FlowServiceV1改为FlowServiceV2,使用我们改造后的controller
在这里插入图片描述
然后重启控制台
为了查看效果,将我们之前在nacos创建的配置文件删掉
然后在刚刚添加的 流控规则 V1里面添加规则
在这里插入图片描述
添加后查看nacos控制台,即可看见我们刚刚添加的流控规则
在这里插入图片描述
这样就非常的nice,但是目前我们只改造了flow规则,剩下的怎么改造,目前我还不会。。。。这个都是官方提供的代码,有兴趣的可以试一试,每个规则对应一个controller,改造相应的controller即可。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值