一、Nacos作为服务配置中心
在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之一。Nacos可以作为配置中心,存储和管理配置信息。
二、Nacos作为服务配置中心的示例
2.1、父工程需要的POM依赖
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.1.0.RELEASE
pom
import
2.2、在Nacos中添加配置信息
1)Nacos中的匹配规则
2)新增配置
在Nacos中新增一个yaml文件的配置:
2.3、构建服务实例
1)本模块POM依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
2)配置两个yml文件
a、为什么配置两个?
Nacos同SpringCloud Config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。
springboot中配置文件的加载是存在优先级顺序的, bootstrap.yml优先级高于application.yml。
b、bootstrap.yml
server:port:3377spring:application:name:nacos-config-clientcloud:nacos:discovery:server-addr:localhost:8848 #nacos服务注册中心地址config:server-addr:localhost:8848 # 配置中心地址file-extension:yaml # 指定yaml格式的配置
c、appliation.yml
spring:profiles:active:dev
3)主启动类
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377
{
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
4)业务类
@RestController
@RefreshScope // 通过Spring Cloud原生注解@RefreshScope实现配置自动更新public class ConfigClientController
{
@Value("${config.info}") // 注入配置中心中的config.info配置信息 private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
2.4、测试
1)测试
启动微服务实例后,测试:
2)测试动态刷新
修改下Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新。
三、Nacos的分类配置功能
3.1、为什么需要分类配置功能
1)问题1:
实际开发中,通常一个系统会准备dev开发环境、test测试环境、prod生产环境。如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?
2)问题2:
一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境......那怎么对这些微服务配置进行管理呢?
3)Nacos提供了分类管理的机制
3.2、Nacos分类配置机制详解
1)Nacos分类配置机制是什么?
类似Java里面的package名和类名。
最外层的namespace是可以用于区分部署环境的, Group和DatalD逻辑上区分两个目标对象。
2)实际应用分析NameSpace —— Nacos默认的命名空间是public, Namespace主要用来实现隔离。比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
Group—— Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去
Service/DataId —— Service就是微服务。一个Service可以包含多个Cluster (集群) ,Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ) ,还可以尽量让同一个机房的微服务互相调用,以提升性能。
3.3、Nacos分类配置示例
1)DataID方案
前面的示例中就配置了一个DataID为nacos-config-client-dev.yaml,可以再多配几个:
根据前面介绍的匹配规则,只要修改application.yml文件中的spring.profiles.active配置项就能读取对应的DataID的配置文件。
2)Group方案
①新建Group
②修改bootstrap.yml文件
③测试
3)Namespace方案
①新建Namespace
回到配置列表查看:
②在dev命名空间中新建一个配置文件
③修改bootstrap.yml文件
④测试