SpringCloudSpring Cloud Alibaba 之 Nacos配置中心(二十八)

Posted H__D

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloudSpring Cloud Alibaba 之 Nacos配置中心(二十八)相关的知识,希望对你有一定的参考价值。

  上一章介绍了Nacos作为注册中心的使用,本章介绍Nacos作为配置中心

  示例代码沿用上一章代码

Nacos配置客户端搭建

  1、在父项目(test-springcloud)中,新建配置客户端模块(springcloud-config-nacos-client8901)

  2、在pom中,依赖Nacos配置依赖

1 <!-- alibaba nacos config -->
2 <dependency>
3     <groupId>com.alibaba.cloud</groupId>
4     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
5 </dependency>

  完整pom如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <parent>
 6         <artifactId>test-springcloud</artifactId>
 7         <groupId>com.test</groupId>
 8         <version>1.0-SNAPSHOT</version>
 9     </parent>
10     <modelVersion>4.0.0</modelVersion>
11 
12     <artifactId>springcloud-config-nacos-client8901</artifactId>
13 
14     <dependencies>
15 
16         <!-- alibaba nacos config -->
17         <dependency>
18             <groupId>com.alibaba.cloud</groupId>
19             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
20         </dependency>
21 
22         <!-- alibaba nacos discovery -->
23         <dependency>
24             <groupId>com.alibaba.cloud</groupId>
25             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
26         </dependency>
27 
28         <!-- spring boot -->
29         <dependency>
30             <groupId>org.springframework.boot</groupId>
31             <artifactId>spring-boot-starter-web</artifactId>
32         </dependency>
33         <dependency>
34             <groupId>org.springframework.boot</groupId>
35             <artifactId>spring-boot-starter-actuator</artifactId>
36         </dependency>
37         <dependency>
38             <groupId>org.springframework.boot</groupId>
39             <artifactId>spring-boot-devtools</artifactId>
40             <scope>runtime</scope>
41             <optional>true</optional>
42         </dependency>
43         <dependency>
44             <groupId>org.projectlombok</groupId>
45             <artifactId>lombok</artifactId>
46             <optional>true</optional>
47         </dependency>
48         <dependency>
49             <groupId>org.springframework.boot</groupId>
50             <artifactId>spring-boot-starter-test</artifactId>
51             <scope>test</scope>
52         </dependency>
53 
54     </dependencies>
55 </project>
pom.xml

  3、在启动引导配置文件bootstrap.yml中,添加如下配置:

 1 spring:
 2   application:
 3     name: nacos-config-client
 4   cloud:
 5     nacos:
 6       discovery:
 7         server-addr: localhost:8848
 8       config:
 9         server-addr: localhost:8848
10         # 配置内容文件的数据格式,默认值:properties
11         file-extension: yaml

  4、在配置文件application.yml中,添加如下配置:

1 # 端口
2 server:
3   port: 8901
4 
5 spring:
6   profiles:
7     # 表示开发环境
8     active: dev

  5、编写启动类

1 @EnableDiscoveryClient
2 @SpringBootApplication
3 public class NacosConfigClientMain8901 {
4     public static void main(String[] args) {
5         SpringApplication.run(NacosConfigClientMain8901.class, args);
6     }
7 }

  6、编写一个controller,如下:

 1 @RestController
 2 // 原生注解,支持Nacos动态刷新功能
 3 @RefreshScope
 4 public class ConfigClientController {
 5 
 6     @Value("${config.info}")
 7     private String configInfo;
 8 
 9     @GetMapping("/config/info")
10     public String getConfigInfo(){
11         return configInfo;
12     }
13 }

  到此客户端搭建完整

Nacos中添加配置文件

  1、在Nacos的Web界面中——〉配置列表——〉“+”号,添加配置,如下:

    

  2、点击发布按钮,即完成配置文件添加

  3、测试

    1)启动Nacos服务、Nacos配置客户端项目

    2)访问地址:http://localhost:8901/config/info,正常访问

      

    3)在Nacos的Web界面中,修改配置文件内容,将version改为 2

      访问地址:http://localhost:8901/config/info,version动态修改成2了

    4)查看控制台输出内容

      

      由于代码中增加了@RefreshScope,刷新原生注解,此注解也支持Nacos动态刷新配置功能,所以当配置文件修改或,能动态刷新配置

Nacos配置文件

  DataId

     在nacos中,新增配置时,需要增加dataId,在 Nacos Spring Cloud 中,dataId 的完整格式如下: 

1 ${prefix}-${spring.profile.active}.${file-extension}

  1)prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

  2)spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}

  3)file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

   Nacos加载配置(Namespace + GroupId + DataId)

  nacos客户端,在加载nacos服务上的配置时,先去找nacos服务上查找对应的Namespace(命名空间)-〉查找对应的Group(组)-〉查询对应的DataId(配置集 ID)

  Namespace(命名空间):用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等,保留空间为public。

  Group(组):Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

  DataId(配置集 ID):Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

  Namespace、Group和DataId的关系如下:

  

  DataId(配置集 ID)示例

  1、在Nacos中分别新增2个配置文件,如下:

    

    nacos-config-client-test.yaml,内容:

1 config:
2   info: nacos config center, nacos-config-client-test.yaml, version = 1

 

  2、修改配置客户端模块内容,application.yml配置,如下:

1 spring:
2   profiles:
3     # 表示开发环境
4     active: test

  3、重新启动项目,访问地址:http://localhost:8901/config/info,获取到的是nacos-config-client-test.yaml文件的内容

  Group(组)示例

  1、在Nacos的Web界面中——〉配置列表——〉“+”号,添加配置,在新的组(BJ_GROUP)中,如下:

    

    配置列表

    

  2、修改配置客户端模块内容,

    application.yml,配置如下:

1 # 端口
2 server:
3   port: 8901
4 
5 spring:
6   profiles:
7     # 表示开发环境
8     active: dev

    bootstrap.yml,增加group,配置如下:

 1 spring:
 2   application:
 3     name: nacos-config-client
 4   cloud:
 5     nacos:
 6       discovery:
 7         server-addr: localhost:8848
 8       config:
 9         server-addr: localhost:8848
10         # 配置内容文件的数据格式,默认值:properties
11         file-extension: yaml
12         group: BJ_GROUP

   3、重新启动项目,访问地址:http://localhost:8901/config/info,获取到的是BJ_GROUP分组中,nacos-config-client-dev.yaml文件的内容

    

  Namespace(命名空间)示例

  1、在Nacos的Web界面中——〉命名空间菜单——〉新建命名空间,如下:

    

    命名空间列表

    

  1、在Nacos的Web界面中——〉配置列表——〉选择“DEV”命名空间——〉“+”号,添加配置,如下:

    

    新增内容:

     

  2、修改配置客户端模块内容

    application.yml配置:

1 # 端口
2 server:
3   port: 8901
4 
5 spring:
6   profiles:
7     # 表示开发环境
8     active: dev

    bootstrap.yml配置

 1 spring:
 2   application:
 3     name: nacos-config-client
 4   cloud:
 5     nacos:
 6       discovery:
 7         server-addr: localhost:8848
 8       config:
 9         server-addr: localhost:8848
10         # 配置内容文件的数据格式,默认值:properties
11         file-extension: yaml
12         group: SZ_GROUP
13         # 命名空间ID
14         namespace: c17382d8-9c38-4b21-b4e8-7f8a802788e2

  3、重新启动项目,访问地址:http://localhost:8901/config/info,获取到的是DEV命名空间-〉BJ_GROUP分组-〉nacos-config-client-dev.yaml文件的内容

    

 

以上是关于SpringCloudSpring Cloud Alibaba 之 Nacos配置中心(二十八)的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloudSpring Cloud Config 配置中心(二十)

SpringCloudSpring Cloud Config 客户端(二十一)

SpringCloudSpring Cloud Alibaba 及 Nacos介绍(二十六)

SpringCloudSpring Cloud Alibaba 之 Nacos配置中心(二十八)

SpringCloudSpring Cloud Bus 服务总线(二十二)

SpringCloudSpring Cloud Alibaba 之 Sentinel熔断降级(三十一)