Sentinel1.8.6规则持久化NACOS中记录

1.下载源码

Release v1.8.6 · alibaba/Sentinel · GitHub

 2. 解压后使用IDEA打开sentinel-dashboard,注释掉pom文件中的nacos下的test 在104行

3.将test下的rule下的nacos复制到Java的rule下

其中:

FlowRuleNacosProvider: 动态获取Nacos配置中心流控规则
FlowRuleNacosPublisher: publish上传流控规则到Nacos配置中心
NacosConfig: Nacos配置
NacosConfigUtils: 流控规则配置

4.新建NacosConfigProperties配置类

 5.修改下NacosConfig.java文件

package com.alibaba.csp.sentinel.dashboard.rule.nacos;

import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity;
import com.alibaba.csp.sentinel.datasource.Converter;
import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.ConfigFactory;
import com.alibaba.nacos.api.config.ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


import java.util.List;
import java.util.Properties;

/**
 * @author Eric Zhao
 * @since 1.4.0
 */
@Configuration
public class NacosConfig {

    // 注入刚新建的nacos配置文件
    @Autowired
    private NacosConfigProperties nacosConfigProperties;

    @Bean
    public Converter<List<FlowRuleEntity>, String> flowRuleEntityEncoder() {
        return JSON::toJSONString;
    }

    @Bean
    public Converter<String, List<FlowRuleEntity>> flowRuleEntityDecoder() {
        return s -> JSON.parseArray(s, FlowRuleEntity.class);
    }

    @Bean
    public ConfigService nacosConfigService() throws Exception {
        // 注释
        // return ConfigFactory.createConfigService("localhost");
        // 新增
        Properties properties = new Properties();
        properties.put(PropertyKeyConst.SERVER_ADDR,nacosConfigProperties.getServerAddr());
        properties.put(PropertyKeyConst.USERNAME,nacosConfigProperties.getUsername());
        properties.put(PropertyKeyConst.PASSWORD,nacosConfigProperties.getPassword());
        properties.put(PropertyKeyConst.NAMESPACE,nacosConfigProperties.getNamespace());
        return ConfigFactory.createConfigService(properties);
    }
}

6.controller层开启 Nacos 适配

com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2 中指定对应的 bean

7.修改sidebar.html

修改resources/app/scripts/directives/sidebar/sidebar.html
直接搜dashboard.flowV1定位57行去掉V1

 8.修改identity.js

修改resources/app/scripts/controllers/identity.js
第4行 FlowServiceV1改为FlowServiceV2

 直接搜/dashboard/flow/,将let url = '/dashboard/flow/' + $scope.app; 改为let url = '/dashboard/v2/flow/' + $scope.app;

 9.项目application.properties 新增配置

# 服务端口、控制台地址、名称
server.port=9100
csp.sentinel.dashboard.server=127.0.0.1:9100
project.name=sentinel-dashboard
# Nacos地址、账号、密码
sentinel.nacos.serverAddr=192.168.180.144:8848
sentinel.nacos.username=nacos
sentinel.nacos.password=nacos
# 默认命名空间就是 public,不用填写,填了public反而找不到,所以这个置空就行。
sentinel.nacos.namespace=

10.注释掉flow_v2.html页面中的回到单机页面,因为回到单击页面 会恢复到 默认内存模式

11.启动项目,注册到Sentinel并测试规则持久化到nacos

# Spring
spring: 
  application:
    # 应用名称
    name: simple-rbac
  profiles:
    # 环境配置
    active: dev
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 192.168.180.144:8848
        # 服务启动后注册空间
        #namespace: ab8f515e-9c1f-4f1c-804f-642c816df64f
        #group: dev01
      config:
        # 配置中心地址
        server-addr: 192.168.180.144:8848
        # 配置文件格式
        file-extension: yml
        # 命名空间
        #namespace: ab8f515e-9c1f-4f1c-804f-642c816df64f
        # 分组
        #group: dev01
        # 共享配置
        #shared-configs:
          #simple-application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
    sentinel:
      eager: true  #是否开启网关限流,默认true
      transport:
        # 添加sentinel的控制台地址
        dashboard: 127.0.0.1:9100
        #指定应用与Sentinel控制台交互的端口,应用本地会起一个该端口占用的HttpServer
        port: 8719
      web-context-unify: false # 默认将调用链路收敛,导致链路流控效果无效
      # 持久化配置
      datasource:
        admin-flow-rule: # 唯一名称可自定义
          nacos:
            # 设置Nacos的连接地址、命名空间和Group ID
            server-addr: ${spring.cloud.nacos.discovery.server-addr}
            username: ${spring.cloud.nacos.discovery.username}
            password: ${spring.cloud.nacos.discovery.password}
            # 设置Nacos中配置文件的命名规则
            dataId: ${spring.application.name}-flow-rules
            groupId: SENTINEL_GROUP
            data-type: json
            # 必填的重要字段,指定当前规则类型是"限流"
            rule-type: flow

 项目中引入sentinel的持久化nacos依赖

<!-- 引入sentinel持久化nacos依赖 -->
<dependency>
   <groupId>com.alibaba.csp</groupId>
   <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

12.演示效果

请求

设置限流

生成的nacos限流配置文件

 

 

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: b'sentinel规则持久化nacos'的意思是将Sentinel规则持久化Nacos,使得在规则发生变化时,可以自动同步至Nacos,保证系统的稳定性和可靠性。这样做也便于管理和维护规则信息。 ### 回答2: Sentinel规则持久化是指将在Sentinel配置的规则信息保存到外部存储器,以便于在应用启动时,可以从外部存储器加载规则,从而实现规则的自动化配置。 Nacos是一款开源的动态服务发现、配置管理和服务管理平台。它可以用于管理应用程序的配置信息、服务发现和服务注册。Sentinel是阿里巴巴开源的一款微服务框架。它可以用于在分布式系统实现流量控制、熔断降级和系统负载保护等功能。 在分布式环境,由于存在多个节点,这些节点之间需要共享配置信息和规则信息。传统的配置和规则信息的管理方式比较繁琐,需要手动配置,而且容易出现人为错误。因此,将规则信息持久化Nacos,可以实现自动化配置和管理,从而提高规则信息的管理效率和运维效率。 具体来说,Sentinel可以通过配置文件的方式将规则信息持久化Nacos。首先需要在Nacos创建一个配置集群,然后在Sentinel进行配置,指定配置的数据源为Nacos。这样就可以将Sentinel规则信息保存到Nacos。 在系统运行时,Sentinel可以从Nacos加载规则信息,并根据规则信息对流量进行控制。如果规则信息发生变化,Sentinel也可以及时地更新规则信息。因此,利用Nacos持久化规则信息,可以实现规则的动态管理和自动化配置,提高系统的稳定性和可靠性。 总之,Sentinel规则持久化Nacos,可以实现规则的自动化管理和动态配置。它具有管理效率高、运维效率高、稳定性好等优点。因此,在分布式环境,将规则信息持久化Nacos,是一种非常值得推广的做法。 ### 回答3: Sentinel规则持久化Nacos是为了让Sentinel控制台配置的规则在重启后仍能够保留,避免重启后规则丢失需要重新手动配置的问题。Nacos是一个开源的注册心和配置心,支持分布式场景下的服务注册、配置管理和服务发现。在Sentinel,我们可以通过将规则持久化Nacos来实现持久化的功能。 首先,我们需要在控制台配置Nacos的相关信息,包括Nacos Server地址、Data ID和Group信息等。其,Data ID和Group信息用于标识Sentinel规则的唯一性。 接下来,我们需要通过编写代码来实现将Sentinel规则持久化Nacos。具体实现方式可以参考官方文档提供的示例代码,主要包括以下几个步骤: 1. 创建Nacos的配置管理客户端,可以通过NacosFactory.createConfigService()方法获取。 2. 将Sentinel规则序列化成JSON字符串,可以通过Jackson等工具实现。 3. 调用Nacos的API,将JSON字符串保存到Nacos,例如使用configService.publishConfig()方法。 4. 在Sentinel应用启动时,需要从Nacos读取保存的规则信息,并将其解析成Sentinel规则对象,例如使用configService.getConfig()方法获取Nacos的配置信息,之后再调用SentinelRuleParser.parseRules()方法将其转换为Sentinel规则对象。 5. 在控制台修改或删除规则时,需要通过调用Nacos的API来更新或删除相应的配置信息,例如使用configService.publishConfig()和cconfigService.removeConfig()方法实现。 通过以上步骤,我们就可以实现将Sentinel规则持久化Nacos的功能,保证了应用重启后规则仍能够得到保留。同时,使用Nacos作为规则持久化心,还能够实现多节点之间的规则同步和分布式配置的管理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值