• SpringCloud全系列知识(2)—— Nacos配置和集群


    SpringCloud(2)— Nacos配置和集群

    一 统一配置管理

    Nacos官方文档

    1.配置热更新

    在这里插入图片描述

    1.新建配置文件

    在Nacos的配置列表中新建一个配置文件。
    在这里插入图片描述

    注意事项:

    Data ID 命名规则:一般情况下使用使用 “微服务名称+运行环境” 作为DataID,后缀名建议使用文件后缀全名,例如:yaml

    Group:分组名称,根据事情需求修改。

    配置内容:按照所选配置格式编写即可。尽可能的配置一些有热更新需求的参数。一般用于服务中的开关配置或模板配置。

    2.读取配置文件

    在这里插入图片描述

    1.引入Nacos的配置管理客户端config依赖

    <dependency>
        <groupId>com.alibaba.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    或者在通过 Spring Ini创建项目时直接勾选

    在这里插入图片描述

    2.创建 bootstrap.yml

    在 项目中的resources文件夹下创建bootstrap.yml文件,bootstrap.yml 叫做引导文件,先于application.yml 执行。

    spring:
      application:
        name: alibaba-order  # 服务名称
      profiles:
        active: dev  #运行环境
      cloud:
        nacos:
          server-addr: http://localhost:8848  # nacos地址
          config:
            file-extension: yaml # 文件后缀名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    配置完成之后,本地配置文件中的相同配置即可直接去掉。

    3.设置细节

    配置文件名(Data ID)一般以微服务名称为准,在多环境时,则以"微服务名-环境名"作为配置文件名。

    例如配置文件名为"alibaba-order-dev.yaml",则配置文件内容应该如下:

    spring:
      application:
        name: alibaba-order  # 服务名称
      profiles:
        active: dev  #运行环境
      cloud:
        nacos:
          server-addr: http://localhost:8848  # nacos地址
          config:
            file-extension: yaml # 文件后缀名
          discovery:
            namespace: public
            username: nacos
            password: nacos
            cluster-name: xian
            # 设置该实例为非临时实例
            #ephemeral: false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    3.配置自动刷新

    Nacos中的统一配置管理文件修改以后,无需重启服务即可实现自动更新。需要通过一下两种方式实现。

    1.在使用了相关值的控制器类上添加 @RefreshScope 注解

    2.使用 @ConfigurationProperties 注解

    @Component
    @Data
    @ConfigurationProperties("systems")
    public class YamlConfig {
        private String os;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    然后在控制器类中使用依赖注入即可

    @RestController
    @RequestMapping("/test")
    public class TestController {
        @Autowired
        private YamlConfig yamlConfig;
    
        @GetMapping
        public String get(){
            //return "123";
            return yamlConfig.getOs();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    推荐使用 @ConfigurationProperties 注解的方式实现配置自动刷新

    4.多环境配置共享

    无论环境如何变化,以服务名称命名的配置文件总是被多个环境共享。

    例如 alibaba-order-dev.yaml 和 alibaba-order.yaml。alibaba-order-dev.yaml仅在dev环境下生效,而 alibaba-order.yaml 在全部环境下均有效。
    在这里插入图片描述

    开发环境中使用多环境测试时,可通过修改服务的配置信息来实现多环境的模拟。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1QijWAHG-1669706854488)(C:\Users\01\AppData\Roaming\Typora\typora-user-images\image-20221129101508618.png)]

    5.配置文件优先级

    统一配置管理中,若存在相同的配置属性,则它们是按照一定的优先级来实现加载。

    指定环境 > 环境共享 > 本地

    二 Nacos集群搭建

    1.Nacos集群框架图

    在这里插入图片描述

    2.Nacos集群实现

    1.初始化数据库

    创建一个名为 nacos 的数据库,编码格式为 utf8。

    下载nacos,在nacos根目录下的conf文件夹内,找到 nacos-mysql.sql 文件,运行至mysql。

    2.编辑配置文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6I6kuHI5-1669706854488)(C:\Users\01\AppData\Roaming\Typora\typora-user-images\image-20221129115608818.png)]

    更改 cluster.conf.example 文件名为 cluster.conf

    编辑 cluster.conf 文件,模拟3台服务器的Nacos地址

    192.168.16.191:8845
    192.168.16.191:8846
    192.168.16.191:8847
    
    • 1
    • 2
    • 3

    编辑 application.properties 文件,设置数据库相关信息及服务端口信息

    server.port=8845
    spring.datasource.platform=mysql
    
    ### Count of DB:
    db.num=1
    
    ### Connect URL of DB:
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&serverTimezone=UTC
    db.user.0=root
    db.password.0=123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    然后将nacos复制3份,分别修改 server.port 的端口值为 cluster.conf 文件中设置的端口值,如果服务器不一样时,端口号则可以保持一致。

    最后分别启动Nacos服务,启动成功以后,配置Nginx。

    #配置nacos集群
    upstream nacos-cluster {
    	server 127.0.0.1:8845;
    	server 127.0.0.1:8846;
    	server 127.0.0.1:8847;
    }
    server {
        listen       8848;
        server_name  localhost;
    	
    	location /nacos {
    	    proxy_pass http://nacos-cluster;
    	}
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    最后运行Nginx,在浏览器访问即可。

  • 相关阅读:
    linux实现开机自启动服务/脚本
    本科毕业论文内容必须有国内外文献综述吗?
    小白的Python+Anaconda+vscode安装使用教程(win11系统手把手教学)(1)
    STL中最常见的三种容器vector、list、map对比分析
    一起Talk Android吧(第四百回:Glide的基本用法)
    spring 事务源码阅读
    蓝桥杯备赛-上学迟到
    18 【Redux Toolkit】
    Maven系列第3篇:详解maven解决依赖问题
    【我不熟悉的javascript】JSON.stringify和JSON.parse方法详解
  • 原文地址:https://blog.csdn.net/shaopengjie2/article/details/128099184