NacosConfig配置项参数详解
⾸先,我们需要在 coupon-customer-impl 项⽬的 resource ⽂件夹中创建 l 配置⽂件。
接下来,你需要在 l ⽂件中添加⼀些 Nacos Config 配置项,我把⼀些常⽤的配置项写到了这⾥,你可以参考⼀下。
1
2spring:
3# 必须把name属性从l迁移过来,否则⽆法动态刷新
读取配置文件失败
4application:三点水者
5name:coupon-customer-serv
6cloud:
7nacos:
8config:
9# nacos config服务器的地址
10server-addr:localhost:8848
11file-extension:yml
12# prefix: ⽂件名前缀,默认是spring.application.name
专业就业率13# 如果没有指定命令空间,则默认命令空间为PUBLIC
14namespace:dev
15# 如果没有配置Group,则默认值为DEFAULT_GROUP
16group:DEFAULT_GROUP
17# 从Nacos读取配置项的超时时间
18timeout: 5000
驱蚊方法19# 长轮询超时时间火车订票时间
20config-long-poll-timeout: 10000
21# 轮询的重试时间
22config-retry-time: 2000
23# 长轮询最⼤重试次数
24max-retry: 3
25# 开启监听和⾃动刷新
26refresh-enabled:true//默认true
27# Nacos的扩展配置项,数字越⼤优先级越⾼
28extension-configs://读取多份配置
l
30group:EXT_GROUP
31# 动态刷新
32refresh:true
l
34group:EXT_GROUP
35refresh:true
⽂件定位配置项:主要⽤于匹配 Nacos 服务器上的配置⽂件。
namespace:Nacos Config 的 namespace 和 Nacos 服务发现阶段配置的 namespace 是同⼀个概念和⽤法。我们可以使⽤
namespace 做多租户(multi-tenant)隔离⽅案,或者隔离不同环境。我指定了 namespace=dev,应⽤程序只会去获取 dev 这个命名空间下的配置⽂件;
group:概念和⽤法与 Nacos 服务发现中的 group 相同,如未指定则默认值为 DEFAULT_GROUP,应⽤程序只会加载相同 group 下的配置⽂件;
prefix:需要加载的⽂件名前缀,默认为当前应⽤的名称,即 spring.application.name,⼀般不需要特殊配置;
file-extension:需要加载的⽂件扩展名,默认为 properties,我改成了 yml。你还可以选择 xml、json、html 等格式。
超时和重试配置项:
timeout:从 Nacos 读取配置项的超时时间,单位是 ms,默认值 3000 毫秒;
config-retry-time:获取配置项失败的重试时间;
config-long-poll-timeout:长轮询超时时间,单位为 ms;
max-retry:最⼤重试次数。
在这⾥,我想多跟你介绍⼀下超时和重试配置⾥提到的长轮询机制的⼯作原理。
当 Client 向 Nacos Config 服务端发起⼀个配置查询请求时,服务端并不会⽴即返回查询结果,⽽是会将这个请求 hold ⼀段时间。
如果在这段时间内有配置项数据的变更,那么服务端会触发变更事件,客户端将会监听到该事件,并获取相关配置变更;蜗牛养殖
如果这段时间内没有发⽣数据变更,那么在这段“hold 时间”结束后,服务端将释放请求。采⽤长轮询机制可以降低多次请求带来的⽹络开销,并降低更新配置项的延迟。
通⽤配置:
server-addr:Nacos Config 服务器地址;
refresh-enabled: 是否开启监听远程配置项变更的事件,默认为 true。
扩展配置:
extension-configs:如果你想要从多个配置⽂件中获取配置项,那么你可以使⽤ extension-configs 配置多源读取策略。
extension-configs 是⼀个 List 的结构,每个节点都有 dataId、group 和 refresh 三个属性,分别代表了读取的⽂件名、所属分组、是否⽀持动态刷新。
在实际的应⽤中,我们经常需要将⼀个公共配置项分配给多个微服务使⽤,⽐如多个服务共享同⼀份 Redis、RabbitMQ 中间件连接信息。这时我们就可以在 Nacos Config 中添加⼀个配置⽂件,并通过 extension-configs 配置项将这个⽂件作为扩展配置源加到各个微服务中。
这样⼀来,我们就不需要在每个微服务中单独管理通⽤配置了。