Nacos作为配置中心

8/24/2021 微服务

# Nacos作为配置中心💥代码实现

# 1、引入依赖💨

<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>
   
</dependencies>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

YML的类别 💨

Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。

springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application

# 2、配置Bootstrap.yml💨

# nacos配置
server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: TEST_GROUP
        namespace: ea7be215-37d0-4175-958c-a8af3545f115
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml
# nacos-config-client-test.yaml   ----> config.info
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

共享配置 & 多配置文件💨

spring:
  application:
    name: nacos-config-multi
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      username: ${nacos.username}
      password: ${nacos.password}
      config:
        server-addr: ${nacos.server-addr}
        namespace: ${nacos.namespace}
        # 用于共享的配置文件
        shared-configs:
          - data-id: common-mysql.yaml
            group: SPRING_CLOUD_EXAMPLE_GROUP
            
          - data-id: common-redis.yaml
            group: SPRING_CLOUD_EXAMPLE_GROUP
            
          - data-id: common-base.yaml
            group: SPRING_CLOUD_EXAMPLE_GROUP

        # 常规配置文件
        # 优先级大于 shared-configs,在 shared-configs 之后加载
        extension-configs:
          - data-id: nacos-config-advanced.yaml
            group: SPRING_CLOUD_EXAMPLE_GROUP
            refresh: true

          - data-id: nacos-config-base.yaml
            group: SPRING_CLOUD_EXAMPLE_GROUP
            refresh: true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 3、配置application.yml💨

spring:
  profiles:
    active: dev # 表示开发环境
    #active: test # 表示测试环境
    #active: info
1
2
3
4
5

# 4、Controller测试接口💨

/**
 * 配置客户端控制器
 *
 * @author LiJunYi
 * @date 2020/11/09
 * RefreshScope 支持Nacos的动态刷新功能
 */
@RestController
@RefreshScope
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 在Nacos中添加配置信息(重点)❗

# 匹配规则-理论💢

  • Nacos中的 Data Id 的组成格式及与SpringBoot配置文件中的匹配规则
  • 官方文档 (opens new window)
  • 说明:之所以需要配置spring.application.name,是因为它是构成Nacos配置管理dataId字段的一部分。
#  在Nacos Spring Cloud 中,dataId的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
  
1、prefix 默认为 spring.application.name 的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置。

2、spring.profile.active即为当前环境对应的 profile。
  注意:当spring.profile.active为空时,对应的连接符 – 也将不存在
  datald的拼接格式变成${prefix}.${file-extension}

3、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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 配置新增💦

nacos_6

  • 图解💨

nacos_7

# 分类配置💢

  • Nacos的图形化管理界面-配置管理💨

nacos_8

  • 命名空间💨

nacos_9

# Namespace+Group+DatalD三者关系

# 是什么💨

类似Java里面的 package名和类名, 最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。

# 三者情况💨

nacos_10

# 默认情况:
Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT

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

# Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去

# Sevice就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,
Cluster是对指定微服务的一个虚拟划分。

比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的
Service微服务起一个集群名称(Hz),给广州机房的Service微服务起一个集群名称(GZ),
还可以尽量让同一个机房的微服务互相调用,以提升性能。

# 最后是Instance,就是微服务的实例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 实例-三种方案加载配置❗

# 1、dataID方案

指定spring.profile.active和配置文件的DatalD来使不同环境下读取不同的配置

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

通过spring.profile.active属性就能进行多环境下配置文件的读取

  • 新建两个不同的配置💨

nacos_11

  • YML💨

nacos_12

# 2、Group方案

  • Nacos配置详情💨

nacos_13

  • YML💨

nacos_14

# 3、Namespace方案

  • Nacos新增命名空间💨

nacos_16

nacos_17

  • bootstrao.yml💨
# nacos配置
server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: TEST_GROUP
        namespace: ea7be215-37d0-4175-958c-a8af3545f115
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16