• Sentinel控制台配置 持久化到nacos


     sentinel控制台,使用方便,功能强大。使用官方的jar包,配置不会持久化,sentinel重启后会导致,之前的规则全部丢失,下面一起改造源码实现规则数据的持久化

    sentinel源码地址

    github访问太慢,直接上镜像版)

    Sentinel: Sentinel 是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要icon-default.png?t=N7T8https://gitee.com/mirrors/Sentinel.git

    因为项目使用的是Spring-cloud-alibaba,Sentinel支持和nacos整合,就持久化到nacos数据库中,同时sentinel还能读取nacos中做的流控规则。

    1 源码目录

    1.1、后台源码修改

    小惊喜:sentinel中有和nacos中对接的源码,只不过没有使用。

    1、改成 默认后台使用sentinel对接nacos,而不是存到内存,

    2、前台页面接口调用nacos对应的接口

    1.1.1 sentinel-dashboard中需要改动的位置

    pom.xml中将sentinel-datasource-nacos包的scope注释掉

    1.1.2 源码持久化到nacos的实现位置

    不多说,先复制到main目录rule包下

    nacos包中的4个类:

    • FlowRuleNacosProvider: 动态获取Nacos配置中心流控规则,读取流控规则
    • FlowRuleNacosPublisher: publish上传流控规则到Nacos配置中心,写入流控规则
    • NacosConfig: Nacos配置
    • NacosConfigUtils: 流控规则在nacos中配置文件的一些细节:后缀、组别等
    1.1.3 NacosConfig配置

    只实现了本地nacos并且需要默认配置,需要支持自定义配置

    改造后

    NacosConfig源码

    1. /*
    2. * Copyright 1999-2018 Alibaba Group Holding Ltd.
    3. *
    4. * Licensed under the Apache License, Version 2.0 (the "License");
    5. * you may not use this file except in compliance with the License.
    6. * You may obtain a copy of the License at
    7. *
    8. * http://www.apache.org/licenses/LICENSE-2.0
    9. *
    10. * Unless required by applicable law or agreed to in writing, software
    11. * distributed under the License is distributed on an "AS IS" BASIS,
    12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13. * See the License for the specific language governing permissions and
    14. * limitations under the License.
    15. */
    16. package com.alibaba.csp.sentinel.dashboard.rule.nacos;
    17. import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity;
    18. import com.alibaba.csp.sentinel.datasource.Converter;
    19. import com.alibaba.fastjson.JSON;
    20. import com.alibaba.nacos.api.PropertyKeyConst;
    21. import com.alibaba.nacos.api.config.ConfigFactory;
    22. import com.alibaba.nacos.api.config.ConfigService;
    23. import org.springframework.beans.factory.annotation.Value;
    24. import org.springframework.context.annotation.Bean;
    25. import org.springframework.context.annotation.Configuration;
    26. import java.util.List;
    27. import java.util.Properties;
    28. /**
    29. * @author Eric Zhao
    30. * @since 1.4.0
    31. */
    32. @Configuration
    33. public class NacosConfig {
    34. @Value("${sentinel.nacos.address}")
    35. private String nacosAddr;
    36. @Value("${sentinel.nacos.username}")
    37. private String nacosUsername;
    38. @Value("${sentinel.nacos.password}")
    39. private String nacosPassword;
    40. @Bean
    41. public Converter, String> flowRuleEntityEncoder() {
    42. return JSON::toJSONString;
    43. }
    44. @Bean
    45. public Converter> flowRuleEntityDecoder() {
    46. return s -> JSON.parseArray(s, FlowRuleEntity.class);
    47. }
    48. @Bean
    49. public ConfigService nacosConfigService() throws Exception {
    50. Properties properties = new Properties();
    51. properties.put(PropertyKeyConst.SERVER_ADDR, nacosAddr);
    52. properties.put(PropertyKeyConst.USERNAME, nacosUsername);
    53. properties.put(PropertyKeyConst.PASSWORD, nacosPassword);
    54. return ConfigFactory.createConfigService(properties);
    55. }
    56. }
    1.1.4 修改配置文件 application.properties

    增加nacos配置信息

    1. #Sentinel 连接nacos配置
    2. sentinel.nacos.address= 192.168.1.109:8848
    3. sentinel.nacos.username= nacos
    4. sentinel.nacos.password= nacos
     1.1.5 配置v2版本controller,调用nacos提供的服务层

    1.2 前端页面源码修改

    1.2.1 配置中添加nacos接口并修改地址

    文件 src/main/webapp/resources/app/scripts/controllers/identity.js

    搜FlowServiceV1 改为 FlowServiceV2

    /dashboard/flow/ 改为 /dashboard/v2/flow/

     1.2.2 修改页面中的路由地址

    文件 src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html

    dashboard.flowV1定位57行去掉V1

    文件 src/main/webapp/resources/app/views/flow_v2.html

    注释掉回到单机页面按钮

    2.项目引用

    2.1 微服务引入jar包 pom.xml
    1. <!-- SpringCloud Alibaba Nacos -->
    2. <dependency>
    3. <groupId>com.alibaba.cloud</groupId>
    4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    5. </dependency>
    6. <!-- Sentinel -->
    7. <dependency>
    8. <groupId>com.alibaba.csp</groupId>
    9. <artifactId>sentinel-datasource-nacos</artifactId>
    10. </dependency>
    2.2 微服务sentinel相关配置
    1. # Spring
    2. spring:
    3. cloud:
    4. sentinel:
    5. eager: true
    6. # sentinel 地址
    7. transport:
    8. dashboard: ${sentinel.host}:${sentinel.port}
    9. filter:
    10. enabled: false
    11. datasource:
    12. ds1:
    13. nacos:
    14. server-addr: ${nacos.host}:${nacos.port}
    15. username: ${nacos.name}
    16. password: ${nacos.pwd}
    17. namespace: ${nacos.namespace}
    18. group-id: ${nacos.group}
    19. data-id: ${spring.application.name}-flow-rules
    20. data-type: json
    21. rule-type: flow

    3 nacos增加sentinel持久化配置文件

    以下文件后缀与组名需要对应

    大功告成,去试试效果吧

  • 相关阅读:
    React + Typescript领域初学者的常见问题和技巧
    航空货运数据挖掘那些事|航班换季
    设计模式之观察者模式学习笔记
    编译器的差别gcc和VS
    vue2双向绑定原理:深入响应式原理defineProperty、watcher、get、set
    IT应用运维最常用指标
    小红书和中兴笔试
    18.cuBLAS开发指南中文版--cuBLAS中的Level-2函数gbmv()
    怎么维护自己的电脑?
    springboot自己添加的配置文件没有绿色叶子问题
  • 原文地址:https://blog.csdn.net/liulangshusheng2012/article/details/132854423