首页 > 编程学习 > 六、nacos环境隔离、服务配置拉取和多环境配置共享

文章目录

  • 一、环境隔离-namespace
    • 1.namespace理解
    • 2.创建命名空间
  • 二、Nacos-实现配置管理
  • 三、nacos-实现服务配置拉取
    • 1.非热更新
    • 2.热更新:
  • 四、实现多环境配置共享
    • 1.开发环境:
    • 2.测试环境
    • 3.结论

一、环境隔离-namespace

1.namespace理解

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

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

2.创建命名空间

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

cloud:
    nacos:
        discovery:
            namespace: 命名空间ID

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

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

二、Nacos-实现配置管理

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

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

1.非热更新

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

<! --nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

在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 #文件后缀名

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

@RestController
@RequestMapping("/user")
public class UserController {
    
    @Value("${your.name}")
    private String name;

    @GetMapping("/name")
    public String getName(){
        return name;
    }
}

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

2.热更新:

使用@RefreshScope开启热更新:

@RefreshScope
@RestController
@RequestMapping("/user")
public class UserController {
    
    @Value("${your.name}")
    private String name;

    @GetMapping("/name")
    public String getName(){
        return name;
    }
}

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

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

controller层:

@RestController
@RequestMapping("/user")
public class UserController {
    
    @Autowired
    private YourNameConfig yourNameConfig;

    @GetMapping("/name")
    public String getName(){
        return yourNameConfig.getName();
    }
}

总结步骤:

在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;
}

在页面显示:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private YourNameConfig yourNameConfig;

    @GetMapping("/name")
    public YourNameConfig getName(){
        return yourNameConfig;
    }
}

启动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 #文件后缀名

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

3.结论

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

Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式