Spring Cloud Alibaba之nacos 配置中心使用

前言 nacos的功能回顾

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

nacos是ali开源的微服务注册中心,其实也是配置中心,详细说明参见:https://nacos.io/zh-cn/docs/what-is-nacos.html。

上一篇中搭建好nacos后,这一篇,学习使用nacos来进行配置中心的功能学习。

一  在项目使用nacos做为配置中心。

Nacos提供用于存储配置和其他元数据功能,为分布式系统中的外部化配置提供服务器端和客户端支持,使用Spring Cloud Alibaba Nacos Config就可以在Nacos Server集中管理Spring Cloud应用的外部属性配置;

Spring Cloud Alibaba Nacos config是在启动的bootstrap阶段,将配置加载到Spring环境中;

Spring Cloud Alibaba Nacos Config使用DataId和GROUP确定一个配置;

 1 # bootstrap.properties 文件的配置信息
 2 #测试 用nacos作为配置中心时的配置信息
 3 spring.application.name= alibabacloud_order_consumer
 4 
 5 # 服务注册与服务发现
 6 spring.cloud.nacos.discovery.server-addr=192.168.162.2:8848
 7 spring.cloud.nacos.discovery.username=nacos
 8 spring.cloud.nacos.username=nacos
 9 spring.cloud.nacos.password=nacos
10 
11 spring.cloud.nacos.config.server-addr=192.168.162.2:8848
12 #千万要注意,这个配置节点,nacos config dataId name.
13 spring.cloud.nacos.config.name=nacos
14 spring.cloud.nacos.config.password=nacos
15 
16 spring.cloud.nacos.config.file-extension=properties

注意:

spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.username=nacos
这两个配置其实指的都是连接nacos使用的用户名和密码,在启动nacos的默认是这两个值。可以通过源代码跟踪找到。

Spring Cloud Alibaba之nacos 配置中心使用

 

 

#千万要注意,这个配置节点,nacos config dataId name.
spring.cloud.nacos.config.name=nacos
而这个就要特别注意了,如果配置了这个,这个表示的是:nacos config dataId,例如,这里写nacos的话,那么在nacos中的配置,就是这样的。这是需要特别注意的地方,当然也可以通过源码看到,配置注释的。实现中特别容易搞错。

Spring Cloud Alibaba之nacos 配置中心使用

 

 

二  nacos中的配置信息是基于命名空间和group隔离的

启动好Nacos之后,在Nacos添加如下的配置:

Data ID: nacos  这里如果不写后缀,那么默认为.properties结尾

Group : DEFAULT_GROUP

配置格式: Properties 

配置内容:

user.name=zhangsan 

user.age=18

DataId是以.properties为扩展名(默认的文件扩展名方式就是.properties);

在运行时必须使用 bootstrap.properties配置文件配置nacos server地址,同时,spring.application.name值必须与Nacos中配置的Data Id匹配(除了.properties或者.yaml后缀);

DataId默认使用`spring.application.name`配置跟文件扩展名结合(配置格式默认使用.properties),GROUP不配置默认使用DEFAULT_GROUP;

注意当你使用域名的方式来访问Nacos时,

spring.cloud.nacos.config.server-addr 配置的方式为 域名:port,例如 Nacos的域名为nacos.power.com,监听的端口为80,

则 spring.cloud.nacos.config.server-addr=nacos.xxx.com:80,注意80 端口不能省略;

如果要在项目中使用Nacos来实现应用的外部化配置,需要添加如下依赖:

<dependency>

    <groupId>com.alibaba.cloud</groupId>

    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

</dependency>

三  Nacos Config配置中心动态刷新原理分析

Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher的refresh 方法;

可以通过配置 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新

 

四  多环境支持

a) Nacos Config 除了支持.properties格式以外,也支持yaml格式,这个时候只需要完成以下两步:

1、在应用的bootstrap.properties配置文件中显式地声明DataId文件扩展名;bootstrap.properties文件配置如下:

应用配置:spring.cloud.nacos.config.file-extension=yml

2、在Nacos的web管控台新增一个DataId为yaml扩展名的配置,如下所示:

Data ID:       nacos.yml

Group  :       DEFAULT_GROUP

配置格式:        YAML或者yml

配置内容:        aa.name: yml-name

                       aa.age: 100

Spring Cloud Alibaba之nacos 配置中心使用

 

 

Spring Cloud Alibaba之nacos 配置中心使用

 

 这里需要注意的是:

1. 如果在程序中有指定了读取的 config dataid,例如:  spring.cloud.nacos.config.name=nacos   那么将会读取  nacos.yml的配置节的信息

2. 如果没有指定读取的dataid,那么默认是读取的是微服务名相头的.yml配置节的信息,实现测试中正是如此。

 

b) 基于profile粒度的多环境配置

spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,不仅仅加载了以 dataid 为 ${spring.application.name}.${file-extension:properties} 为的基础配置还加载了dataid为 

${spring.application.name}-${profile}.${file-extension:properties} 的基础配置;

在日常开发中如果遇到多套环境下的不同配置,可以通过Spring提供的 ${spring.profiles.active} 配置项来激活使用某个配置文件;

spring.profiles.active=develop

${spring.profiles.active}当通过配置文件来指定时必须放在 bootstrap.properties文件中

比如在Nacos上新增一个dataid为:nacos-config-dev.yaml的基础配置,如下所示:

Data ID:        nacos-config-deve.yaml

Group  :        DEFAULT_GROUP

配置格式:        YAML

配置内容:        current.env: dev-env

启动 Spring Boot 应用测试;

如果需要切换到生产环境,只需要更改 ${spring.profiles.active} 参数配置即可,如下所示:

spring.profiles.active=product

实验效果如下:

Spring Cloud Alibaba之nacos 配置中心使用

 

 Spring Cloud Alibaba之nacos 配置中心使用

 

 五  遇到的一些问题

1. 如果我们在 bootstrap.properties/yml和application.properties/yml里面都配置了,spring.application.name= alibabacloud-order-consumer ,那么最终注册的服务名以  application.properties/yml 里面的配置为准,决定了读到nacos中默认的dataid也是这个决定的。

2. 尝试将  spring.application.name= alibabacloud-order-consumer 配置成有使用中横杠时,发现多环境配置,不受影响,与网上很多说无法读取的情况不会出现。可以正常读取。

Spring Cloud Alibaba之nacos 配置中心使用

 

 

六  总结

1. nacos作为配置中心,时,需要在bootstrap.yml中配置读取的配置信息 如节点,环境配置,

2. 默认读取的是:dataid 为 ${spring.application.name}.${file-extension:properties} 的nacos中配置的信息。

3. 当我们指定读取的命令空间,多环境时,那么读取的配置信息为:dataid 为 ${spring.application.name}-{profile}.${file-extension:properties} 如果要读取yml的文件配置信息,则还需要指定一下读取的配置的扩展名为yml,即:

spring.cloud.nacos.config.file-extension=yaml

 

上一篇:Spring Cloud Alibaba之nacos 集群搭建


下一篇:SpringCloud Alibaba微服务原理与实战-读书笔记