文章目录
nacos - 配置管理
目标
1 能够说出配置中心的概念和使用场景。
2 了解主流的配置中心。
3 理解nacos 的功能特性
4 掌握使用和入门方法。
5 安装方式。
6 核心概念和数据模型。
1 什么是配置中心
1.1 什么是配置
应用程序启动的时候需要读取一些配置文件,服务发现,服务管理,服务治理。
-
独立于程序的只读变量
-
伴随着应用程序的整个生命周期
-
多种加载方式)
- 硬编码hard code 配置文件 环境变量,启动参数,基于数据库
-
配置需要治理
- 同一个程序在不同的环境(开发测试生产)。不同的集群需要有不同的配置
1.2 什么是配置中心
微服务架构中,当系统从一个单体应用,被拆分成了分布式系统上一个个服务节点后,配置文件必须跟着迁移(分割),这样配置就会分散了。还有一个问题就是 冗余。
比如说apiadmin 中接口服务其实是通过负载均衡对外提供服务的。如果一个服务挂掉了。另一个服务会继续提供服务支持。
配置中心的作用,将配置从各个应用中剥离出来,对配置进行统一的管理,应用自身不需要去管理配置。
2 nacos 简介
2.1 主流配置中心对比
spring cloud config
apollo
nacos
性能层面 nacos 最好的。功能层面 apollo 最好。
2.2 nocos 简介
阿里开源的,支持服务发现,配置管理,服务治理的综合型解决方案
2.3 nacos 特性
主要提供四大功能
1 服务发现与服务健康检查
服务注册更加的方便。提供了服务实时健康检查,防止向不健康的应用发送请求。
2 动态配置管理 *
集中和动态的方式管理配置,消除了更新配置需要重新部署应用的麻烦,这种配置更加的高效和灵活。
3 动态DNS服务
DNS 协议服务发现的能力,主要是对异构语言的支持,支持注册在nacos 上的服务以域名的方式暴露端点,让第三方应用方便地查阅以及发现。
4 服务和元数据管理
管理数据中心所有的服务以及元数据。
3 nacos 快速入门
3.1 安装
3.2 配置入门
3.2.1 发布配置
3.2.2 客户端获取配置
1>依赖引入
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.4.1</version>
</dependency>
2>获取外部化配置
public static void main(String[] args) throws NacosException {
//使用nacos client 获取服务配置信息
String dataId = "black_joker";
String group = "DEFAULT_GROUP1";
//nacos 地址
String serverAddr = "localhost:8848";
Properties properties = new Properties();
properties.put("serverAddr",serverAddr);
properties.put("username","nacos");
properties.put("password","nacos");
properties.put("namespace","");
//获取配置
ConfigService configService = NacosFactory.createConfigService(properties);
//获取配置
String config = configService.getConfig(dataId, group, 5000);
System.out.println(config);
}
4 nacos 配置管理基础应用
4.1配置管理(数据)模型
配置管理通过namespace、group、dataID。能够定位到一个配置集。
(namespace(group(dataId)))如何定位一个配置文件。也就是定位一个配置集。
配置集(dataID):
每个项目往往下面有若干工程,每个配置集(dataId)是一个工程的主配置文件。
一个配置文件就是一个配置集,一个配置集可以包含系统的各种配置信息。
配置项
配置集里面的内容。
配置分组(group)
代表某个项目 XXX系统,XXX平台
分组的意思,不同的配置分组下面可以有相同的配置集(dataid) 在nacos 上创建一个配置时候,如果没有填写配置分组默认是 default_group 实际使用的作用是:能够区分不同的项目或者是应用
命名空间(namespace)
不同的环境 dev test prod 做隔离。
对不同的环境进行隔离。主要是用来隔离不同的开发环境 (dev prod test )配置可能各不相同。或者是隔离不同的用户。不用的开发人员使用同一个nacos 管理各自的配置。不同的命名空间下可以存在相同的配置分组 group 或者是配置集 dataId
4.2 命名空间管理
namespace 的设计是nacos 基于多环境多租户 数据(配置和服务)隔离的。
- 从一个租户的角度看,如果有多套环境可以指定namespace 来区分不同的环境。
-
每个命名空间都有命名空间的 id。
-
public 是保留的命名空间,默认的命名空间。
4.3 配置管理
4.3.1 不同的命名空间的差异如果不大,可以做导出和克隆的操作。
4.3.2 历史版本查询
4.3.3 监听查询
//启动监听
configService.addListener(dataId, group, new Listener() {
@Override
public Executor getExecutor() {
return null;
}
//当配置有变化的时候获取通知
@Override
public void receiveConfigInfo(String s) {
System.out.println(s);
}
});