Loading

十九、SpringCloud Alibaba Nacos服务注册和配置中心(三) Nacos作为配置中心

1 Nacos作为配置中心 - 基础配置

① 新建工程演示nacos作为服务配置中心

clipboard


② 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-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>


③ yml文件

【注意】这里需要两个配置文件 application.yml , bootstrap.yml

为什么需要两个配置文件?

Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置

之后,才能保证项目的正常启动

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


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: yml #指定yaml格式的配置


application.yml

spring:
  profiles:
    active: dev # 表示开发环境
    #active: test # 表示测试环境
    #active: info


④、主启动类

@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain.class,args);
    }
}


⑤、业务类验证

@RestController
@RefreshScope  //支持Nacos的动态刷新功能
public class ConfigClientController {

    @Value("${config.info}")
    private String configInfo;

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

}


⑥、在Nacos中增加相应的配置

clipboard

【注意】Data ID的名称如何设置?

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

prefex默认为spring.application.name

spring.profile.active 即为当前环境对应的profile,可以通过spring.profile.active来配置

file.exetension 为配置内容的数据格式,可以通过spring.cloud.nacos.config,file-extension来配置


⑦、测试

访问http://localhost:3377/config/info,出现Nacos上配置的配置,说明Nacos成功作为配置中心

对服务提供配置

clipboard



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

1)Nacos作为配置中心存在的问题

问题1:

实际开发中通常会为一个系统准备

dev开发环境

test开发环境

prod开发环境

如何保证环境启动时服务能正确读取到 Nacos相应环境的配置文件呢


问题2:

一个大型的分布式微服务系统会有很多微服务子项目,

每个微服务项目又会有相应的开发环境,测试环境,预发环境,正式环境

那么怎么对这些微服务配置进行管理呢?


2)Nacos的图形化管理界面

配置管理:

clipboard


命名空间

clipboard


3)Namespace、Group 、 Data ID 三者之间的关系

a、是什么?

类似于java中的package名和类名,最外层的namespace是用于区分部署环境,Group 和 Data ID逻辑上区分两个目标对象


b、三者关系

clipboard

默认情况:

Namespace = public | Group = DEFAULT_GROUP | 默认Cluster是 DEFAULT


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

比如说我们现在有三个环境:开发、测试、生产环境,我们可以创建三个Namespace,不同的Namespace之间是隔离的

Group默认是DEFAULT_GROUP,Group可以吧不同的微服务划分到同一个分组中

Service就是微服务;一个Service可以包含多个Cluster,Nacos默认的Cluster是DEFAULT,Clusters是对指定微服务的一个虚拟划分。比如说为了容灾,将Service微服务分别部署在了杭州机房和广东机房

这时可以给杭州机房的service微服务起一个集群名称HZ

给广州机房的service微服务起一个集群名称GZ,还可以尽量让同一个机房的微服务相互调用,以提升性能


c、如何配置 Group 和 Namespace

clipboard

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: DEV_GROUP
        namespace: 7d8f0f5a-6a53-4785-9686-dd460158e5d4 #命名空间ID
posted @ 2021-07-17 17:22  青岑  阅读(153)  评论(0编辑  收藏  举报