[toc]

一、配置中心

官方地址:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
说明:之所以需要配置spring.application.name,是因为它是构成Nacos配置管理dataId字段的一部分。
在Nacos Spring Cloud中,dataId的完整格式如下:

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

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

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

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

通过Spring Cloud 原生注解@Refreshscope实现配置自动更新:
最后配置文件名称格式如下:

$(spring.application.name}-$(spring.profiles.active}.${spring.cloud.nacos.config.file-extension

二、创建配置中心模块

1. 创建模块

image.png

2. 修改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>cloud_learn</artifactId>
        <groupId>org.cloud.learn</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>

3. 创建配置文件

  1. application.yaml
spring:
  profiles:
    active: dev
  1. bootstrap.yaml
server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置

4. 创建启动类

package org.learn.cloud;

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);
    }
}

5. 编写业务类

创建控制层

package org.learn.cloud.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
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

三、nacos编写配置

1. 打开如下页面

image.png

2. 编写配置

image.png

  1. 名称为yaml后缀
    nacos-config-client-dev.yaml

  2. 编写内容

config:
   info: "nacos config client dev version 1.0"

四、测试

测试地址:http://localhost:3377/config/info
测试类型:GET
测试结果:
image.png

五、配置管理

image.png

1. 名称规范

${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

  1. prefix默认为spring.application.name的值
  2. spring.profile.active既为当前环境对应的profile,可以通过配置项spring.profile.active 来配置
  3. file-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension配置

2.Namespace+Group+Data ID三者关系

image.png
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),还可以尽量让同一个机房的微服务互相调用,以提升性能。

最后是Instance,就是微服务的实例。

3. DataID方案

默认空间+默认分组+新建dev和test两个DataID

指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置
新建dev配置DataID
image.png

新建test配置DataID
image.png

配置获取
image.png

4. Group方案

通过Group实现环境区分

新建Group
image.png

在nacos图形界面控制台上面新建配置文件DataID
image.png

在config下增加一条group的配置即可。可配置为DEV_GROUP或TEST_GROUP
image.png

5. Namespace方案

新建dev/test的Namespace
image.png

回到服务管理-服务列表查看
image.png

按照域名配置填写
image.png

配置根据namespace获取

Q.E.D.


只有创造,才是真正的享受,只有拚搏,才是充实的生活。