Bootstrap

Nacos作为配置中心基本使用

基础配置

在nacos上添加配置

在这里插入图片描述

  • pom
    <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-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  • bootstrap.yml

这里的后缀只能写yaml,不能写yml

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格式的配置
        group: DEFAULT_GROUP # 分组
        # namespace: 命名空间ID

# {spring.application.name}-{spring.profiles.active}.{spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml

  • application.yml
spring:
  profiles:
    active: test
  • main
@EnableDiscoveryClient
@SpringBootApplication
public class AlibabaConfigClientApp3377 {

    public static void main(String[] args) {
        SpringApplication.run(AlibabaConfigClientApp3377.class,args);
    }

}
  • controller
@RestController
@RefreshScope
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

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

Nacos的分类配置

是什么?

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

为什么这么设计?

在这里插入图片描述

默认情况:

  • Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT

  • Nacos默认的命名空间是public,Namespace主要用来实现隔离。

    • 比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
  • Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去,多个Service可以组成Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。

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

DataID方案

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

如:

  • spring.profile.active指定为dev,对应读取的配置文件为:{spring.application.name}-dev.{spring.cloud.nacos.config.file-extension}

  • spring.profile.active指定为test,对应读取的配置文件为:{spring.application.name}-test.{spring.cloud.nacos.config.file-extension}

group方案

通过在yml中配置不同group,实现读取对应group的DataID文件。

  • 不同group下的DataID可以相同。

如:在新建配置的时候,指定不同的GROUP

在这里插入图片描述

bootstrap.yml中指定读取不同的分组

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格式的配置
        group: DEV_GROUP # 分组

结论:指定哪个分组就会读取对应分组DataID

namespace方案

在这里插入图片描述

在这里插入图片描述

  • 不同的namespace是相互隔离的,在不同的namespace下可以建立不同的分组和DataID

在这里插入图片描述

bootstrap.yml中指定读取不同的namespace和Group

  • 注意:在配置文件中指定的namespace是对应的namespaceID,不是名称
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格式的配置
        group: DEFAULT_GROUP # 分组
        namespace: 命名空间ID
;