Nacos系列之(四)Nacos作为服务配置中心

Nacos作为服务配置中心

以前我们使用配置中心:

我们把配置放到Github上,Config 作配置中心,Bus实现配置动态刷新

现在使用配置中心:

配置放到Nacos中,Nacos作配置中心,Nacos实现配置动态刷新

1. Nacos作为配置中心-基础配置
  • 建Module【cloudalibaba-config-nacos-client3377】

  • 改POM

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloud2020</artifactId><groupId>com.atguigu.springcloud</groupId><version>1.0-SNAPSHOT</version></parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>cloudalibaba-config-nacos-client3377</artifactId>
    
        <dependencies>
            <!--nacos-config-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>
                <!--nacos-discovery-->
                <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
                <!--web + actuator-->
                <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
                <!--一般基础配置-->
                <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>
    
  • 写YML

    bootstrap.yml(也可使用bootstrap.properties)

    server:
      port: 3377
    
    spring:
      application:
        name: nacos-config-client
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.59.128:8848 #服务注册中心地址
          config:
            server-addr: 192.168.59.128:8848 #配置中心地址
            file-extension: yaml #指定yaml格式的配置,表示当前项目可以从Nacos中读取结尾为yaml的配置文件
    

    application.yml

    spring:
      profiles:
        active: dev
    

    注:为什么要配置两个yml文件

    ​ Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。
    ​ springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application。

  • 主启动

    package com.atguigu.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @EnableDiscoveryClient
    @SpringBootApplication
    public class NacosConfigClientMain3377 {
        public static void main(String[] args) {
            SpringApplication.run(NacosConfigClientMain3377.class, args);
        }
    }
    
  • 业务类

    package com.atguigu.springcloud.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RefreshScope // 通过SpringCloud原生注解实现配置自动刷新
    public class ConfigClientController {
        @Value("${config.info}")
        private String configInfo;
    
        @GetMapping("/config/info")
        public String getConfigInfo() {
            return configInfo;
        }
    }
    
  • 在Nacos中添加配置信息

    设置Data Id的规则

    官网:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

    最终的公式:${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

    注:公式中每项都代表客户端项目中配置文件中的内容。

    在此处,spring.application.name和spring.cloud.nacos.config.file-extension对应于bootstrap.yml中的

    spring:
      application:
        name: nacos-config-client
      cloud:
        nacos:
          config:
            file-extension: yaml #指定yaml格式的配置,表示当前项目可以从Nacos中读取结尾为yaml的配置文件
    

    spring.profile.active对应于application.yml中的

    spring:
      profiles:
        active: dev
    
  • 测试

    运行Nacos

    运行cloudalibaba-config-nacos-client3377

    在Nacos的配置管理中增加配置项

    访问http://localhost:3377/config/info,获取到了配置信息

    修改Nacos的配置管理中配置项的内容,再次访问http://localhost:3377/config/info

    几秒后就改变了,说明实时刷新生效了。

2. Nacos作为配置中心-分类配置

用于解决多环境多项目管理的问题。

​ Nacos分类配置的分类设计思想类似Java里面的包名和类名,最外层的namespace是可以用于区分部署环境的,Group和DatalD逻辑上区分两个目标对象。

默认情况:
​ Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT
​ Nacos默认的命名空间是public,Namespace主要用来实现隔离。
​ 比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。

​ Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去。
​ Service就是微服务;一个Service可以包含多个Cluster (集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ) ,给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
​ 最后是lnstance,就是微服务的实例。

2.1 多环境配置

改变application.yml中spring.profile.active 配置项的值,即可实现从Nacos中读取不同环境的配置文件

注:前提是保证Nacos中有相应的配置文件

2.2 多分组配置

bootstrap.yml中指定spring.cloud.nacos.config.group 配置项的值,即可实现从Nacos的不同分组下读取配置文件。

在Nacos中准备不同分组的两个同名的配置文件

bootstrap.yml中指定group参数即可实现读取不同分组的配置

2.3 多命名空间配置

命名空间:实现配置隔离

bootstrap.yml中指定spring.cloud.nacos.config.namespace 配置项的值,即可实现从Nacos的不同命名空间下读取配置文件。

在Nacos中新建两个命名空间

创建后的命名空间会显示在配置列表中

分别在dev和test命名空间下创建一个配置文件nacos-config-client-dev.yaml

内容分别是dev命名空间下的文件

config:
    info: "nacos-config-client-dev.yaml, 59b5d080-4875-4c0a-84d3-6ee2fd322a26"

test命名空间下的文件

config:
    info: "nacos-config-client-dev.yaml, 	b99117fd-a7bc-4a9d-9c79-426292b572c0"

bootstrap.yml中指定namespace参数即可实现读取不同命名空间的配置,namespace的值就是创建命名空间时生成的命名空间ID

多命名空间配置的应用场景

  • 环境配置隔离

    开发、生产、测试环境,每个环境一套配置

  • 微服务配置隔离

    每个微服务的配置通过命名空间区分

2.4 其他相关概念
  • 配置集:一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

  • 配置集ID:在Nacos中,就是Data ID

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

  • 配置分组

    默认所有配置集都属于:DEFAULT_GROUP

同样一个配置集属于不同分组

3. 加载多配置集

具体的应用场景:拆分应用的配置到不同的配置集中

在bootstrap.properties/yml中添加如下配置

spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
# 是否动态刷新
spring.cloud.nacos.config.extension-configs[0].refresh=true

spring.cloud.nacos.config.extension-configs[1].data-id=mybatis-plus.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
# 是否动态刷新
spring.cloud.nacos.config.extension-configs[1].refresh=true

spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
# 是否动态刷新
spring.cloud.nacos.config.extension-configs[2].refresh=true
4. 总结
  • 使用Nacos作为配置中心后,获取配置的方法:SpringBoot任何从配置文件中获取值的方法在这都适用,如:@Value、@ConfigurationProperties......
  • 配置中心中有的配置项优先使用配置中心的。
  • 开发期间配置可以放在项目中,等项目上线,配置统一放到Nacos中即可。
posted @   刘二水  阅读(225)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示