• 六、nacos环境隔离、服务配置拉取和多环境配置共享


    一、环境隔离-namespace

    1.namespace理解

    Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离。
    在这里插入图片描述

    Namespace:命名空间,常用于生产环境、开发环境的区分。
    Group:组,常用将业务相关程度较高的放同一个组(订单和支付)。

    2.创建命名空间

    创建:
    在这里插入图片描述
    获取ID:
    在这里插入图片描述
    将user-service中的8082端口修改环境,在application.yml中添加:

    cloud:
        nacos:
            discovery:
                namespace: 命名空间ID
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    Nacos环境隔离:

    namespace用来做环境隔离。
    每个namespace都有唯一id。
    不同namespace下的服务不可见 。

    二、Nacos-实现配置管理

    创建配置列表:
    在这里插入图片描述
    在这里插入图片描述

    三、nacos-实现服务配置拉取

    1.非热更新

    在这里插入图片描述
    在userservice的pom.xml中引入Nacos的配置管理客户端依赖:

    <! --nacos配置管理依赖-->
    >
        >com.alibaba.cloud>
        >spring-cloud-starter-alibaba-nacos-config>
    >
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在userservice中的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml:

    spring:
        application:
            name: userservice #微服务名称
        profiles:
            active: dev #开发环境,这里是dev
        cloud:
            nacos:
                server-addr: localhost:8848 #nacos地址
                config:
                    file-extension: yaml #文件后缀名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    启动项目,查看是否能读取nacos中的配置文件:

    @RestController
    @RequestMapping("/user")
    public class UserController {
        
        @Value("${your.name}")
        private String name;
    
        @GetMapping("/name")
        public String getName(){
            return name;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    成功获取:
    在这里插入图片描述

    2.热更新:

    使用@RefreshScope开启热更新:

    @RefreshScope
    @RestController
    @RequestMapping("/user")
    public class UserController {
        
        @Value("${your.name}")
        private String name;
    
        @GetMapping("/name")
        public String getName(){
            return name;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    使用@ConflgurationProperties注解,创建config层,包中类为:

    @Component
    @Data
    @ConfigurationProperties(prefix = "your")
    public class YourNameConfig {
        private String name;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    controller层

    @RestController
    @RequestMapping("/user")
    public class UserController {
        
        @Autowired
        private YourNameConfig yourNameConfig;
    
        @GetMapping("/name")
        public String getName(){
            return yourNameConfig.getName();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    总结步骤:

    在nacos中添加配置文件。
    在微服务中引入nacos的config依赖。
    在微服务中添加bootstrap.yaml,配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个文件。

    四、实现多环境配置共享

    1.开发环境:

    对use-service:8081:
    在这里插入图片描述
    获取nacos中的配置:

    @Component
    @Data
    @ConfigurationProperties(prefix = "your")
    public class YourNameConfig {
        private String name;
        private Integer age;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在页面显示:

    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @Autowired
        private YourNameConfig yourNameConfig;
    
        @GetMapping("/name")
        public YourNameConfig getName(){
            return yourNameConfig;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    启动user-service:8081服务,成功获取:
    在这里插入图片描述

    2.测试环境

    对user-service:8082,修改bootstrap.yaml,将环境修改为测试环境:

    spring:
      application:
        name: userservice #微服务名称
      profiles:
        active: test #测试环境,这里是test
      cloud:
        nacos:
          server-addr: localhost:8848 #nacos地址
          config:
            file-extension: yaml #文件后缀名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    启动user-service:8081服务,成功获取:
    在这里插入图片描述

    3.结论

    普通环境无法获取开发环境下的配置;
    多种配置的优先级:
    在这里插入图片描述

  • 相关阅读:
    SQL实现自定义排序
    RoCE、IB和TCP等网络的基本知识及差异对比
    CF1559E Mocha and Stars(dp+莫比乌斯反演)
    构建器模式-C++实现
    解决easyExcel模板填充时转义字符\{xxx\}失效
    10、Python函数命名空间、作用域(LEGB)及Global
    zookeeper集群部署安装
    Selenium自动化测试实战之自动化测试基础
    机器学习实验------密度聚类方法之DB-Scan
    Linux使用操作(一)
  • 原文地址:https://blog.csdn.net/m0_59376721/article/details/128053195