当前位置:   article > 正文

Nacos:配置中心(三)_nacos配置中心

nacos配置中心

目录

1.Nacos定位

2.Nacos的安装配置

3.整合Nacos

3.1.Nacos安装

3.2.Nacos登录

3.3.配置Nacos     

4.Nacos使用

4.1.引入 Maven 依赖

4.2.配置bootstrap.yml

4.3.Nacos配置类

4.4.启用Nacos服务

4.5.测试获取配置

5.加载多个配置文件

datasource-dev.yaml

mybatis-plus-dev.yaml

本地文件bootstrap.yml

Contro代码

测试结果

总结

6.异常处理

鸣谢


1.Nacos定位

微服务架构下关于配置文件的一些问题:

        配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散
在各个微服务中,不好统一配置和管理。
        配置文件无法区分环境。微服务项目可能会有多个环境,例如:测试环境、预发布环境、生产环
境。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要我们去各个微服务下手动
维护,这比较困难。
        配置文件无法实时更新。我们修改了配置文件之后,必须重新启动微服务才能使配置生效,这对一
个正在运行的项目来说是非常不友好的。
基于上面这些问题,我们就需要配置中心的加入来解决这些问题。

配置中心的思路是:

  • 首先把项目中各种配置全部都放到一个集中的地方进行统一管理,并提供一套标准的接口。
  • 当各个服务需要获取配置的时候,就来配置中心的接口拉取自己的配置。
  • 当配置中心中的各种参数有更新的时候,也能通知到各个服务实时的过来同步最新的信息,使之动态更新。

总结:

        服务管理平台:服务注册、配置和路由

        配置管理:统一的配置管理

2.Nacos的安装配置

Nacos的学习资源主要有以下两个

        Nacos官网: Nacos官网

        Nacos GitHub: NacosGitHub

        快速下载 nacos 的地址 :快速下载地址

3.整合Nacos

本项目使用版本一览,测试两个版本都ok

Spring BootSpring CloudSpring Cloud AlibabaNocosJDK
2.7.72021.0.52021.0.5.02.2.9.RELEASE1.8

2.3.12.RELEASE

2.2.9.RELEASE

1.8

注意:SpringBoot3.0开始不支持jdk8

3.1.Nacos安装

参考博客:Nacos安装(二)

3.2.Nacos登录

单机模式启动Nocos服务后,访问登录

地址:http://127.0.0.1:8848

用户名/密码:nacos/nocos

3.3.配置Nacos     

1)配置中心简介

  • 命名空间Namespace:用来区分环境
    • 开发(dev)、测试(test)、生产(prod):利用命名空间来做环境隔离
  • Data ID: 用来区分配置,可以理解成对应我们的一个微服务
    • 例如:数据空配置,redis配置,kafka配置。
    • 命名规则:application.name + profiles.active + file-extension。
    • 如果bootstrap.yml文件中没有配置profiles.active + file-extension,我们只需要用服务名命名即可。
  • Group:用来区分不同的应用,默认DEFAULT_GROUP,如果在bootstrap.yml配置了profiles.active,这里填写profiles.active的值即可。
  • 配置格式:和项目对应

2)创建命名空间

如果想指定不同开发环境配置,如开发环境,测试环境等,我们就需要配置我们刚刚在上面讲的namespace。创建命名空间如下图所示:

命名空间ID:测试环境、生产环境

描述:对环境的描述

 创建命名空间后,我们就可以在配置列表中看到我们创建的命名空间

3)创建配置文件

选择对应的命名空间,点击右边加号创建配置文件 

dataId 的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension} 

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

spring.profiles.active:即为当前环境对应的 profile。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变

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

比如说我们现在要获取应用名称为nacos-config-client的应用在dev环境下的yaml配置,dataid如下:

nacos-config-client-dev.yaml

4.Nacos使用

        使用nacos作为配置中心,Nacos读取的是bootstrap.yml,而我们项目中的配置文件名称是application.properties/application.yml,所以我们要修改我们项目中的配置文件名为bootstrap.yml。

4.1.引入 Maven 依赖

首先,我们还是要引入 Maven 依赖,在maven仓库使用最新版本:

Maven Repository: nacos

  1. <!--注册中心的依赖-->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  5. <version>2.2.9.RELEASE</version>
  6. </dependency>
  7. <!-- 配置中心的依赖 -->
  8. <dependency>
  9. <groupId>com.alibaba.cloud</groupId>
  10. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  11. <version>2.2.9.RELEASE</version>
  12. </dependency>

注意:注册中心和配置中心的依赖版本要根据 SpringBoot 版本来选择。

具体版本对应关系;版本说明 · alibaba/spring-cloud-alibaba Wiki (github.com) 

4.2.配置bootstrap.yml

在微服务resources中创建bootstrap.yml文件,添加如下nacos配置信息:

  1. spring:
  2. application:
  3. name: nacos-test
  4. profiles:
  5. #指定启动环境
  6. active: dev
  7. cloud:
  8. nacos:
  9. discovery:
  10. # Nacos服务注册中心地址
  11. server-addr: 127.0.0.1:8848
  12. # 分组,不同分组之间不能调用,用于微服务之间的隔离
  13. group: DEFAULT_GROUP
  14. # 生产环境
  15. namespace: 534c904d-7f24-4086-acbd-daf628cb1446
  16. config:
  17. # 是否开启配置中心 默认true
  18. enabled: true
  19. # 指定Nacos配置中心的地址
  20. server-addr: 127.0.0.1:8848
  21. # 区分环境:开发环境、测试环境、预发布环境、⽣产环境
  22. namespace: 91d34e57-55b0-4182-b881-ab0b5aefabe9
  23. # 区分不同应⽤:同⼀个环境内,不同应⽤的配置,通过group来区分。
  24. group: ${spring.profiles.active}
  25. #指定yaml格式的配置 默认properties
  26. file-extension: yaml
  27. # 自动刷新配置文件,默认true
  28. refresh-enabled: true
  29. # Nacos 认证用户
  30. username: nacos
  31. # Nacos 认证密码
  32. password: nacos
  33. # 配置文件prefix
  34. prefix: ${spring.application.name}

4.3.Nacos配置类

        增加一个 Nacos 的配置文件,通过这个类可以拉取nacos中配置:

  1. import com.alibaba.cloud.nacos.NacosConfigProperties;
  2. import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
  3. import com.alibaba.nacos.api.exception.NacosException;
  4. import com.alibaba.nacos.api.naming.NamingService;
  5. import lombok.Data;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.cloud.context.config.annotation.RefreshScope;
  9. import org.springframework.stereotype.Component;
  10. import javax.annotation.PostConstruct;
  11. /**
  12. * @program: NacosConfig
  13. * @description: NacosConfig
  14. * @author: dyt
  15. * @create: 2022-07-29 16:39
  16. **/
  17. // 刷新配置
  18. @RefreshScope
  19. @Data
  20. @Component
  21. public class NacosConfig {
  22. @Value("${server.port}")
  23. private Integer serverPort;
  24. @Value("${spring.application.name}")
  25. private String applicationName;
  26. // @NacosInjected
  27. // private NamingService namingService;
  28. @Autowired
  29. NacosConfigProperties nacosConfigProperties;
  30. @Autowired
  31. NacosDiscoveryProperties nacosDiscoveryProperties;
  32. /**
  33. * 通过Naming服务注册实例到注册中心
  34. *
  35. * @throws NacosException
  36. */
  37. @PostConstruct
  38. public void registerInstance() throws NacosException {
  39. NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();
  40. namingService.registerInstance(applicationName, "127.0.0.1", serverPort);
  41. }
  42. }
  • @NacosValue注解是Spring Cloud Alibaba Nacos提供的注解,用于获取Nacos配置中心的配置值。它可以自动监听配置变化并动态更新
  • @Value注解是Spring框架提供的注解,用于获取配置文件中的值,可以用于获取任意配置文件(如application.properties、application.yml)中的配置项。使用@Value注解时,需要指定配置项的完整路径,例如:@Value("${config.key}")。

  • 我这里NamingService 始终报空指针异常,只能自己初始化

 4.4.启用Nacos服务

        在Spring Boot的启动类上添加@EnableDiscoveryClient注解,启用Nacos的服务注册和发现功能。

  1. //启用Nacos作为服务发现的功能
  2. @EnableDiscoveryClient
  3. //引入了spring-cloud-starter-alibaba-nacos-discovery依赖时,默认情况下会自动启用Nacos的服务注册和发现功能
  4. @SpringBootApplication
  5. public class NacosTestApplication {
  6. public static void main(String[] args) {
  7. SpringApplication.run(NacosTestApplication.class, args);
  8. }
  9. }
  • 如果想要配置项的值自动刷新,仅在 @NacosPropertySource 加 autoRefreshed = true 是不够的,在 @NacosValue 上面也得加 autoRefreshed = true
  •  @EnableDiscoveryClient 注解,开启 Spring Cloud 的注册发现功能。不过从 Spring Cloud Edgware 版本开始,实际上已经不需要添加 @EnableDiscoveryClient 注解,只需要引入 Spring Cloud 注册发现组件,就会自动开启注册发现的功能。例如说,我们这里已经引入了 spring-cloud-starter-alibaba-nacos-discovery 依赖,就不用再添加 @EnableDiscoveryClient 注解了

4.5.测试获取配置

最后我们写一个模拟获取配置参数的 Controller 类

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/594494
推荐阅读
相关标签