Alibaba微服务组件Nacos配置中心实战与源码分析

本文详细介绍了Nacos配置中心的使用,包括快速启动、配置文件扩展名支持、动态更新、profile粒度配置、namespace与Group自定义、DataId扩展配置以及公用配置。同时,深入分析了Nacos配置中心的架构,讲解了nacos-config-client的配置获取、监听器注册和长轮询机制,以及nacos-config-server的配置发布、配置dump和长轮询处理。通过实例展示了如何在微服务中集成和使用Nacos配置中心。

一、Nacos配置中心使用

官方文档: https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

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

在这里插入图片描述

1.1 快速开始

准备配置,nacos server中新建nacos-config.properties
在这里插入图片描述
在这里插入图片描述
注意,配置格式为properties.
在这里插入图片描述

注意dataid是以 properties(默认的文件扩展名方式)为扩展名。

1.2 搭建nacos-config服务

通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。

1)引入依赖

<?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>spring-cloud-alibaba-mall</artifactId>
        <groupId>org.jihu.mall</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>nacos-config</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

</project>

2)添加bootstrap.properties (注意不是application.yml,否则会一直报错,连接地址为localhost:8848)

spring.application.name=nacos-config

# 配置中心地址
spring.cloud.nacos.config.server-addr=192.168.131.172:8848

注意当你使用域名的方式来访问 Nacos 时,spring.cloud.nacos.config.server-addr 配置的方式为 域名:port。 例如 Nacos 的域名为abc.com.nacos,监听的端口为 80,则 spring.cloud.nacos.config.server-addr=abc.com.nacos:80。 注意 80 端口不能省略

3)启动服务,测试微服务是否使用配置中心的配置

@SpringBootApplication
public class NacosConfigApplication {
   
   

    public static void main(String[] args) {
   
   
        ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
        String userName = applicationContext.getEnvironment().getProperty("user.name");
        String userAge = applicationContext.getEnvironment().getProperty("user.age");
        System.out.println("user name :" + userName + "; age: " + userAge);
    }
}

在这里插入图片描述

基于 dataid 为 yaml 的文件扩展名配置方式

spring-cloud-starter-alibaba-nacos-config 对于 yaml 格式也是完美支持的。这个时候只需要完成以下两步:

1、在应用的 bootstrap.properties 配置文件中显示的声明 dataid 文件扩展名。如下所示:

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

2、在 Nacos 的控制台新增一个dataid为yaml为扩展名的配置,如下所示:
在这里插入图片描述

这两步完成后,重启测试程序,可以看到如下输出结果:
在这里插入图片描述
注意:默认情况下会去以微服务名称进行匹配,所以默认的配置文件可以不用谢扩展名(.yaml/.properties)。

1.3 Config相关配置

Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP

在这里插入图片描述

支持配置的动态更新

@SpringBootApplication
public class NacosConfigApplication {
   
   

    public static void main(String[] args) throws InterruptedException {
   
   
        ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
        while (true) {
   
   
            //当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
            String userName = applicationContext.getEnvironment().getProperty("user.name");
            String userAge = applicationContext.getEnvironment().getProperty("user.age");
            System.err.println("user name :" + userName + "; age: " + userAge);
            TimeUnit.SECONDS.sleep(1);
        }
    }
}

我们修改nacos上的配置文件,然后再来观察log:
在这里插入图片描述
可以看打到,这里很快的就读取到了修改后的值。

支持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.application.name=nacos-config

# 配置中心地址
spring.cloud.nacos.config.server-addr=192.168.131.172:8848

# dataid 为 yaml 的文件扩展名配置方式
# `${spring.application.name}.${file-extension:properties}`

# 声明 dataid 文件扩展名
spring.cloud.nacos.config.file-extension=yaml

#profile粒度的配置   `${spring.application.name}-${profile}.${file-extension:properties}`
spring.profiles.active=develop

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

Nacos 上新增一个dataid为:nacos-config-develop.yaml的基础配置,如下所示:
在这里插入图片描述
启动 Spring Boot 应用测试的代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值