Nacos配置中心总结
Nacos配置文件的加载顺序和优先级
加载顺序
nacos作为配置中心时,需要在bootstrap.yml文件中添加nacos config相关的配置,这样系统启动时就能先去拉取nacos server上的配置了。拉取过来后会和本地配置文件进行合并。
bootstrap.yml文件
spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        namespace: c4829fb4-fbd9-475e-a39d-071f26064e7b
        group: DEFAULT_GROUP
        username: nacos
        password: nacos
  profiles:
    active: dev
  application:
    name: consumerservice
配置文件读取规则
- 根据namespace、group、data-id三个配置去找文件
- 会从nacos中读取多个配置文件: 
  - [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
- [spring.application.name].yaml,例如:userservice.yaml
 
- 不管profile怎么变化,一定会加载[spring.application.name].yaml文件,所以多个环境共享的配置可以写入这个文件中
- 上面的示例没有写data-id,那么最后找到的是指定namespace和指定group下的consumerservice-dev.yaml配置文件,如果指定了data-id那么就是读取指定配置文件了,不过在这种场景下一般不会指定data-id,当我们使用nacos存储sentinel配置文件的时候会指定data-id。
配置文件的优先级
 
Nacos整合Sentinel
引入依赖,特别是引入sentinel-datasource-nacos依赖
        <!--nacos服务发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--Nacos配置管理依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
        <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!--以nacos作为sentinel数据源的依赖-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
指定sentinel的规则配置文件
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        cluster-name: HZ
        namespace: c4829fb4-fbd9-475e-a39d-071f26064e7b  #命名空间id
        group: testgroup1
        username: nacos
        password: nacos
    loadbalancer:
      nacos:
        enabled: true #开启负载均衡
    openfeign:
      compression:
        request:
          enabled: true #开启请求压缩
          min-request-size: 2048  #设置触发压缩的大小下限,此处也是默认值
          mime-types: text/html,application/xml,application/json #设置压缩的数据类型,此处也是默认值
        response:
          enabled: true #开启响应压缩
      okhttp:
        enabled: true
    sentinel:
      transport:
        dashboard: localhost:8080
      web-context-unify: false   #是否统一web上下文,默认为false;如果配置为 true,则对所有请求应用统一的流控和熔断规则;如果配置为 false,则对每个请求的上下文信息进行独立处理,并针对每个 URL 或资源配置流控和熔断规则
      eager: true       # 是否在启动时就初始化所有规则
      datasource:      #配置sentinel规则持久化到nacos
        flux-control: #流控管理,名称可以自定义
          nacos:
            data-id: consumerservice-sentinel-dev.json #sentinel规则配置文件的dataId
            namespace: c4829fb4-fbd9-475e-a39d-071f26064e7b
            group-id: DEFAULT_GROUP
            server-addr: 127.0.0.1:8848  #nacos地址
            rule-type: flow #指定配置文件里的是哪种规则
        degrade-control:  #降级规则
          nacos:
            data-id:  
            namespace: c4829fb4-fbd9-475e-a39d-071f26064e7b
            group-id: DEFAULT_GROUP
            server-addr: 127.0.0.1:8848
            rule-type: degrade
        param-flow-rule:  #热点规则
          nacos:
            data-id:
            namespace: c4829fb4-fbd9-475e-a39d-071f26064e7b
            group-id: DEFAULT_GROUP
            server-addr: 127.0.0.1:8848
            rule-type: param-flow
流控规则配置
[
  {
    "resource": "/test", // 资源名
    "limitApp": "default", // // 针对来源,若为 default 则不区分调用来源
    "grade": 1, // 限流阈值类型(1:QPS;  0:并发线程数)
    "count": 1, // 阈值
    "clusterMode": false, // 是否是集群模式
    "controlBehavior": 0, // 流控效果 (0:快速失败;  1:Warm Up(预热模式);  2:排队等待)
    "strategy": 0,  // 流控模式(0:直接; 1:关联; 2:链路)
    "warmUpPeriodSec": 10, // 预热时间(秒,预热模式需要此参数)
    "maxQueueingTimeMs": 500, // 超时时间(排队等待模式需要此参数)
    "refResource": "rrr" // 关联资源、入口资源(关联、链路模式)
  }.
]
在nacos中创建对应的配置文件,在yaml文件中使用data-id指定配置文件
 
熔断降级配置
[
    {
        "resource": "/degrade",
        "grade": 0, // 熔断策略,支持慢调用比例(0),异常比例(1),异常数(2)策略
        "count": 1000, // 慢调用比例模式下为慢调用临界 RT(超出该值计为慢调用,单位ms);异常比例/异常数模式下为对应的阈值
        "slowRatioThreshold": 0.1,// 慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入)
        "minRequestAmount":  10, //熔断触发的最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断
        "timeWindow": 10, // 熔断时长,单位为 s
        "statIntervalMs": 1000 // 统计时长(单位为 ms),如 60*1000 代表分钟级
    }
]	
热点参数配置
[
  {
    "resource": "/test1",
    "grade": 1, // 限流模式(QPS 模式,不可更改)
    "paramIdx": 0, // 参数索引
    "count": 13, // 单机阈值
    "durationInSec": 6, // 统计窗口时长
    "clusterMode": false, // 是否集群 默认false
    "controlBehavior": 0, // 流控效果(支持快速失败和匀速排队模式)
    "limitApp": "default",
    // 高级选项
    "paramFlowItemList": [{
        "classType": "int", // 参数类型
        "count": 222, // 限流阈值
        "object": "2" // 参数值
      }]
  }
]
系统参数配置
[
  {
    "avgRt": 1, // RT
    "highestCpuUsage": -1, // CPU 使用率
    "highestSystemLoad": -1, // LOAD
    "maxThread": -1, // 线程数
    "qps": -1, // 入口 QPS
    "count": 55, // 阈值,在CPU使用率中是百分比
  }
]
授权规则配置
[
  {
    "resource": "sentinel_spring_web_context",
    "limitApp": "/test",
    "strategy": 0 // 授权类型(0代表白名单;1代表黑名单。)
  }
]
参考
- Sentinel官网
- Sentinel结合Nacos实现配置持久化(全面)



















