一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情。
微服务系列文章目录
- 深入微服务-SpringBoot 自动装配原理
- 深入微服务-SpringCloud调用组件Feign
- 深入微服务-服务注册与发现 SpringCloud Eureka之基础
- 深入微服务-服务注册与发现 SpringCloud Eureka之高可用以及核心原理
- 深入微服务之Nacos 基础及Nacos Server搭建
- 深入微服务-Nacos 核心概念及服务发现实战
- 深入微服务-Nacos 配置中心核心概念及实战
前言
本系列带着大家深入微服务 Spring体系的各个框架的基本使用以及底层原理。上一篇文章介绍了Nacos的核心概念以及客户端实现服务发现的功能,本节将带着大家学习下Nacos Config核心概念以及实战
分布式配置中心的作用
分布式配置中心可以集中管理程序配置以及实现不重启服务容器,动态修改程序的配置内容,市面上的分布式配置中心有携程的Apollo,SpringCloud Config,Nacos Config 配置中心。
Nacos 配置中心是什么
- Nacos Config 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持
- 使用 Nacos Config,可以在 Nacos Server 配置界面集中管理 Spring Cloud 应用的外部属性配置
- 当应用程序通过部署管道(例如:Jenkins)从开发到测试再到生产时,可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容
Nacos 配置中心核心概念
- 配置 (Configuration) 在软件开发过程中将一些需要变更的参数、变量从代码中分离出来独立管理,以独立的配置文件的形式存在,根据不同的部署环境可以进行切换不同的配置。配置变更是调整系统运行时的有效手段之一。
- 配置管理 (Configuration Management) 在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理
Nacos 配置中心的配置一致性模型
Nacos 配置管理一致性分为两部分,第一部分是Server间一致性协议(Nacos Server集群环境),一个是SDK(Nacos Config Client)与Server的一致性协议,配置作为分布式系统中飞强一致性数据,在出现脑裂的时候高可用性高于一致性,因此配置中心采用的是AP一致性协议
Nacos Config 实战
需实现效果:通过Nacos实现配置的动态变更
1、启动Nacos Server 2、nacos server中新建serviceA-dev.yaml
3、搭建Nacos Config 服务 3.1) 引入Nacos Client依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
3.2) 添加bootstrap.yaml
spring:
profiles:
active: dev #指定环境
application:
name: serviceA # 服务名称
cloud:
nacos:
config:
server-addr: nacos:8848
file-extension: yaml
username: nacos
password: nacos
3.3) 添加启动类,测试功能
@SpringBootApplication
public class NacosConfigApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.out.println("my name is :"+userName+"; age: "+userAge);
}
}
启动服务之后,控制台输出
Nacos Config功能
支持profile粒度的配置
spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,不仅仅加载了以 dataid 为 ${spring.application.name}.${file-extension:properties}
为前缀的基础配置,还加载了dataid为 ${spring.application.name}-${profile}.${file-extension:properties}
的基础配置,
可以通过Spring 提供的 ${spring.profiles.active}
这个配置项来配置,实现读取不同的环境
spring:
profiles:
active: dev #指定环境
支持自定义namespace配置
Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等
在没有明确指定 ${spring.cloud.nacos.config.namespace}
配置的情况下, 默认使用的是 Nacos 上 public
这个namespae。如果需要使用自定义的命名空间,可以通过以下配置来实现:
namespace 对应的是命名空间的id
spring:
cloud:
nacos:
config:
namespace: xxx # 命名空间ID
命名空间ID默认为默认生成,可指定
支持自定义 Group 的配置
在没有明确指定 ${spring.cloud.nacos.config.group}
配置的情况下, 默认使用的是 DEFAULT_GROUP
。如果需要自定义自己的 Group,可以通过以下配置来实现:
spring:
cloud:
nacos:
config:
group: DEV_GROUP
支持共享配置
共享配置 解决多个应用间配置共享的问题
spring:
cloud:
nacos:
config:
shared-configs:
- data-id: shared-configs.yml
refresh: true
- 通过 spring.cloud.nacos.config.shared-configs[n].data-id 来支持多个共享 Data Id 的配置。
- 通过 spring.cloud.nacos.config.shared-configs[n].group 来配置自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
- 通过 spring.cloud.nacos.config.shared-configs[n].refresh 来控制该Data Id在配置变更时,是否支持应用中动态刷新,默认false
支持自定义扩展DataId配置
支持自定义 Data Id 的配置
spring:
cloud:
nacos:
config:
extension-configs:
- data-id: shared-configs.yml
refresh: true
- 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的配置方式来支持多个 Data Id 的配置。
- 通过 spring.cloud.nacos.config.extension-configs[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
- 通过 spring.cloud.nacos.config.extension-configs[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的
总结
Nacos 基础篇差不多更新完了,后面会给大家带来Nacos 源码解析部分,感谢支持