4、Nacos作为服务配置中心演示
4.1、Nacos作为配置中心-基础配置
-
新建cloudalibaba-config-nacos-client3377
-
POM
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>cloud2020</artifactId> <groupId>com.likun.springcloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloudalibaba-config-nacos-client3377</artifactId> <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> </project>
-
YML
-
why配置两个
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,
拉取配置之后,才能保证项目的正常启动。springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
-
YML
-
bootstrap
# nacos配置 server: port: 3377 spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 #Nacos服务注册中心地址 config: server-addr: localhost:8848 #Nacos作为配置中心地址 file-extension: yaml #指定yaml格式的配置 # ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
-
application
spring: profiles: active: dev # 表示开发环境
-
-
-
主启动
package com.likun.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** * @author likun * @create 2021-05-02 6:13 */ @EnableDiscoveryClient @SpringBootApplication public class NacosConfigClientMain3377 { public static void main(String[] args) { SpringApplication.run(NacosConfigClientMain3377.class, args); } }
-
业务类
package com.likun.springcloud.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * @author likun * @create 2021-05-02 6:14 */ @RestController @RefreshScope public class ConfigClientController { @Value("${config.info}") private String configInfo; @GetMapping("/config/info") public String getConfigInfo() { return configInfo; } }
-
在Nacos中添加配置信息
Nacos中的匹配规则
-
理论
-
Nacos中的dataid的组成格式及与SpringBoot配置文件中的匹配规则
-
官网
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
-
最后公式:
s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name−{spring.profiles.active}.${spring.cloud.nacos.config.file-extension}-
实操
-
配置新增
-
-
Nacos界面配置对应
设置DataId
-
公式: s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name−{spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
-
prefix 默认为 spring.application.name 的值
-
spring.profile.active 即为当前环境对应的 profile,可以通过配置项spring.profile.active 来配置。
-
file-exetension 为配置内容的数据格式,可以通过配置spring.cloud.nacos.config.file-extension 来配置
-
小总结说明
-
历史配置
Nacos会记录配置文件的历史版本默认保留30天,此外还有一键回滚功能,回滚操作将会触发配置更新
回滚:
-
-
测试
-
启动前需要在nacos客户端-配置管理-配置管理栏目下有对应的yaml配置文件
-
运行cloud-config-nacos-client3377的主启动类
-
调用接口查看配置信息
http://localhost:3377/config/info
-
-
自带动态刷新
更改nacos配置文件version为2
4.2、Nacos作为配置中心-分类配置
-
问题
多环境多项目管理
问题1:
实际开发中,通常一个系统会准备
dev开发环境
test测试环境
prod生产环境。
如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?问题2:
一个大型分布式微服务系统会有很多微服务子项目,
每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境…
那怎么对这些微服务配置进行管理呢? -
Nacos的图形化管理界面
-
配置管理
-
命名空间
-
-
Namespace+Group+Data ID三者关系?为什么这么设计?
1 是什么
类似Java里面的package名和类名
最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
2 三者情况默认情况:
Namespace=public,Group=DEFAULT_GROUP, 默认Cluster是DEFAULTNacos默认的命名空间是public,Namespace主要用来实现隔离。
比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去
Service就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。
比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,
这时就可以给杭州机房的Service微服务起一个集群名称(HZ),
给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。最后是Instance,就是微服务的实例。
-
Case
-
DataID方案
-
指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置
-
默认空间+默认分组+新建dev和test两个DataID
-
新建dev配置DataID
-
-
新建test配置DataID
-
通过spring.profile.active属性就能进行多环境下配置文件的读取
-
测试
http://localhost:3377/config/info
配置是什么就加载什么
-
-
Group方案
-
通过Group实现环境区分
新建Group
-
在nacos图形界面控制台上面新建配置文件DataID
-
bootstrap+application
在config下增加一条group的配置即可。
可配置为DEV_GROUP或TEST_GROUP
-
-
Namespace方案
-
新建dev/test的Namespace
注意下面的命名空间ID:
-
回到服务管理-服务列表查看
-
按照域名配置填写
-
YML
-
bootstrap
# nacos注册中心 server: port: 3377 spring: application: name: nacos-order cloud: nacos: discovery: server-addr: localhost:8848 #Nacos服务注册中心地址 config: server-addr: localhost:8848 #Nacos作为配置中心地址 file-extension: yaml #这里我们获取的yaml格式的配置 namespace: 5da1dccc-ee26-49e0-b8e5-7d9559b95ab0 #group: DEV_GROUP group: TEST_GROUP
-
application
# Nacos注册配置,application.yml spring: profiles: #active: test active: dev #active: info
-
-
-