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实现配置持久化(全面)