文章目录
- 上一篇已经对 Nacos 做过简单介绍了,这篇就直接开始作为服务配置中心演示
1. 配置中心 - 基础配置
-
新建模块 :alibaba-nacos-config-client-3377
-
修改 POM
<dependencies> <!--nacos-config--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!--nacos-discovery--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--web + actuator--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--一般基础配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
-
编写 YML
-
bootstrap.yml
server: port: 3377 spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 #服务注册中心地址 config: server-addr: localhost:8848 #配置中心地址 file-extension: yaml #指定yaml格式的配置
-
application.yml
spring: profiles: active: dev
-
编写主启动类
@SpringBootApplication @EnableDiscoveryClient public class NacosConfigClientMain3377 { public static void main(String[] args) { SpringApplication.run(NacosConfigClientMain3377.class, args); } }
-
业务类
-
Controller :ConfigClientController
@RestController @RefreshScope public class ConfigClientController { @Value("${config.info}") private String configInfo; @GetMapping("/config/info") public String getConfigInfo() { return configInfo; } }
- 在Nacos中添加配置信息
-
Nacos中的匹配规则
官网地址 :https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
通过上面的理论可以得出本项目的 Data-Id 如下:
-
添加配置步骤 :
nacos-config-client-dev.yaml
config:
info: “{Config-Center:Nacos, Profiles:dev, Version:1.1.1}”
-
测试
启动 Nacos 控制台
启动 3377
访问 :http://localhost:3377/config/info -
修改配置,体验动态刷新
2. 配置中心 - 分类配置
2.1 存在的问题
- 问题1 :
实际开发中,通常─个系统会准备:
- dev开发环境
- test测试环境
- prod生产环境。
如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?
- 问题2:
一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境…那怎么对这些微服务配置进行管理呢?
2.2 Nacos 中的设计
-
一个配置文件可以通过以下三个属性来定位
Namespace+Group+Data ID
-
这三个属性是什么
- 类似Java里面的package名和类名
- 最外层的 namespace 是可以用于区分部署环境的
- Group 和 DatalID 逻辑上区分两个目标对象。
- 三者关系
- 默认情况:
- Namespace = public
- Group = DEFAULT_GROUP
- Cluster = DEFAULT
- Nacos默认的命名空间是 public,Namespace主要用来实现隔离。
- 比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个 Namespace,不同的Namespace 之间是隔离的。
- Group默认是 DEFAULT_GROUP,Group 可以把不同的微服务划分到同一个分组里面去
Service 就是微服务;一个 Service 可以包含多个 Cluster (集群)
- Nacos 默认 Cluster 是DEFAULT,Cluster 是对指定微服务的一个虚拟划分。比方说为了容灾,将 Service 微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的 Service 微服务起一个集群名称(Hz) ,给广州机房的 Service 微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
- 最后是 Instance,就是微服务的实例。
2.3 按 Data-ID 分类
- 指定 spring.profile.active 和配置文件的 DataID 来使不同环境下读取不同的配置
- 当前测试的环境 :默认空间 + 默认分组 + 新建 dev 和 test 两个 DataID
-
新建 dev 环境的配置文件
-
新建 test 环境的配置文件
-
修改使用的配置文件
-
重启项目,测试
2.4 按 Group 分类
- 通过 Group 实现环境区分
- 新建一个 DEV 分组
- 新建一个 TEST 分组
- 修改 application.yml
- 修改 bootstrap.yml
- 测试
- 修改分组
- 测试
2.5 按 Namespace 分类
-
新建 DEV 、TEST 两个命名空间
-
在 DEV、TEST 两个命名空间中添加相应配置文件
-
修改 bootstrap.yml
-
测试
-
切换命名空间
-
测试