2.1 Nacos配置管理

一、统一配置管理

  1. 配置更改热更新

  2. Nacos进行配置

    1. Nacos菜单栏找到配置列表(配置管理-配置列表)

    2. 点击新建按钮,在表单中填写内容

      1. Data Id:配置文件的名称,必须唯一(服务名称-环境.yaml,如:snow-user-dev.yaml,后缀建议全称)

      2. Group:默认即可

      3. 描述:描述内容即可

      4. 配置格式:按照Data Id的后缀来

      5. 配置内容:有热更新需求的内容

      6. 发布

二、微服务拉取配置

  1. 配置获取流程:先读取bootstrap.yml,在读取application.yml,这就可以通过bootstrap.yml获取nacos的配置了

  2. 步骤:

    1. 引入Nacos客户端管理依赖坐标

               <dependency>
                   <groupId>com.alibaba.cloud</groupId>
                   <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
               </dependency>
    2. 新建bootstrap.yml文件,此文件是引导文件,优先级高于application.yml

      假设,Nacos中创建的配置名为:user-server-dev.yaml

       spring:
           application:
               name: user-server  # 服务名
           profiles:
               active: dev  # 开发环境
           cloud:
               nacos:
                   config: # 配置中心配置
                       file-extension: yaml  # 文件后缀名
                       server-addr: 地址:端口  # Nacos地址
                       namespace: 命名空间id # 创建命名空间时候生成的id
                   discovery: # 命名空间配置
                       server-addr: 地址:端口  # Nacos地址
                       namespace: 命名空间id # 创建命名空间时候生成的id

      注意:Nacos中的名字与bootstrap.yml中配置的name、active、file-extension有关系!!!

    3. 删除applciation.yml中的重复配置

    4. 注意

      新版SpringCloud中没有引入bootstrap包,需要手动引入

               <dependency>
                   <groupId>org.springframework.cloud</groupId>
                   <artifactId>spring-cloud-starter-bootstrap</artifactId>
               </dependency>

      同时需要引入健康检查

               <dependency>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-starter-actuator</artifactId>
               </dependency>

      启动类上需要添加相应注解:

       @SpringBootApplication
       @EnableDiscoveryClient
       @MapperScan("cn.learn.user.mapper")
       public class UserApplication {
      
           public static void main(String[] args) {
               SpringApplication.run(UserApplication.class, args);
           }
      
       }

三、配置自动刷新

  1. 需要通过两种方式实现配置的热更新:

    1. 方式一:在使用@Value注解的方法所在类上添加@RefreshScope注解

       @RestController
       @RequestMapping("/test")
       @RefreshScope
       public class test {
      
           @Value{"${teat.name}"}
           private String name;
      
       }
    2. 方式二:使用@ConfigurationProperties注解——推荐用法

       @Component
       @Data
       @ConfigurationProperties(prefix = "test")
       public class TestProperties{
      
           private String name;
      
       }

      备注:通过类来实现配置的加载

四、多环境配置共享

  1. 微服务在启动的时候会从nacos中读取多个配置文件

    1. [spring.application.name]-[spring.profiles.active].yaml,例如:user-service-dev.yaml

    2. [spring.application.name].yaml,例如user-service.yaml

      所以无论环境怎么变化,[spring.application.name].yaml这个文件一定会被加载,因此,多环境共享配置一般写在这个配置文件中

      备注:教案中的配置都是写在nacos的public环境中

      ​ 也可以写在程序的application.yml配置中

  2. 如果多环境中有相同的配置,本地 < [spring.application.name].yaml < [spring.application.name]-[spring.profiles.active].yaml

五、Nacos集群搭建

  1. 集群结构图:

    官方集群图:

    官方img

    理解的集群图:

    自己理解的

  2. 集群搭建

    1. 初始化数据库

      1. 将nacos的数据存储改为数据库连接,现在数据库汇总创建对应的数据表,Nacos的文件包中存在对应sql语句

    2. 下载nacos,并解压

    3. 配置nacos:

      1. 集群配置:

        1. 修改config目录中的cluster.conf.example,重命名为cluster.conf

        2. 在下面删掉原配置信息,添加自己的配置信息

        3. 也就是自己的Nacos集群的:服务器地址:端口号

      2. MySQL配置以及application.properties配置:

        详见第一天的Nacos安装

    4. 进入每个nacos目录的bin目录下,输入启动命令即可

       sh startup.sh
    5. 配置Nginx反向代理

      在nginx中添加对应的config配置

       upstream nacos-cluster {
           # 所有nacos的连接地址以及端口号
           server 127.0.0.1:8845;
           server 127.0.0.1:8846;
           server 127.0.0.1:8847;
       }
      
       server {
           listen       80;
           server_name  localhost;
      
           location /nacos {
               proxy_pass http://nacos-cluster;
           }
       }

      备注:大部分配置不用解释

    6. 代码中配置nacos的连接地址:

       spring:
           cloud:
               nacos:
                   server-addr: localhost:80 # Nacos地址

      备注:直接访问nginx的代理连接即可

  3. 优化:

    1. 实际部署时,需要给做反响代理的服务器设置一个域名,这样后续如果nacos服务器ip有了变更,也无需修改代码

    2. Nacos的各个节点应该部署到多个不同的服务器上,做好容灾和隔离

最后更新于

这有帮助吗?