Nacos是阿里的一个开源产品,是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。
1.1 什么是配置
应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数 据库连接参数、启动参数等。
1.2 什么是配置中心
在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移 (分割),这样配置就分散了。配置中心将配置从各应用中剥离出来,对配置进行统一管理,应用自身不需要自己去 管理配置,各个服务从配置中心中获取配置。
为什么用配置中心?
传统应用配置往往是本地静态配置,修改起来非常麻烦。而且在发布的时候,也容易出现问题,格式不标准等,使用配置中心,对配置进行统一管理,各个服务从配置中心中获取配置,实现动态配置。让配置标准化。
配置中心的服务流程如下:
1、用户在配置中心更新配置信息。
2、服务A和服务B及时得到配置更新通知,从配置中心获取配置。
2、外部mysql数据库支持
- 1.安装数据库,版本要求:5.6.5+ ,mysql 8 以下
- 2.初始化mysql数据库,新建数据库nacos_config,数据库初始化文件:${nacoshome}/conf/nacos-mysql.sql
- 3.修改${nacoshome}/conf/application.properties配置文件,增加支持mysql数据源配置(目前只支持 mysql),添加mysql数据源的url、用户名和密码。
3.Nacos配置入门
3.1 发布配置
Data ID: nacos‐simple‐demo.yaml
Group : DEFAULT_GROUP
配置格式: YAML
配置内容: common:
config1: something
3.2 nacos客户端获取配置
新建项目,引入依赖:
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos‐client</artifactId>
<version>1.1.3</version>
</dependency>
类:
public class SimpleDemoMain {
public static void main(String[] args) throws NacosException {
//nacos 地址
String serverAddr = "127.0.0.1:8848";
//Data Id
String dataId = "nacos‐simple‐demo.yaml";
//Group
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put("serverAddr",serverAddr);
ConfigService configService = NacosFactory.createConfigService(properties);
//获取配置,String dataId, String group, long timeoutMs
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
}
}
4 Nacos配置管理模型
对于Nacos配置管理,通过Namespace、group、Data ID能够定位到一个配置集。
配置集(Data ID)
在系统中,一个配置文件通常就是一个配置集,一个配置集可以包含了系统的各种配置信息,例如,一个配置集可 能包含了数据源、线程池、日志级别等配置项。
配置项
配置集中包含的一个个配置内容就是配置项。它代表一个具体的可配置的参数与其值域,通常以 key=value 的形 式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。
配置分组(Group)
配置分组是对配置集进行分组,不同的配置分组下可以有 相同的配置集(Data ID)。配置分组的名称默 认采用 DEFAULT_GROUP 。配置分组的常见场景:可用于区分不同的项目或应用,业务业务隔离-Group分组:,例如:学生管理系统的配置集 可以定义一个group为:STUDENT_GROUP。
有两个微服务,一个是订单系统,一个是用户系统,用group对其分组
命名空间(Namespace)
命名空间(namespace)可用于进行不同环境的配置隔离。例如可以隔离开发环境、测试环境和生产环境,因为 它们的配置可能各不相同,或者是隔离不同的用户,不同的开发人员使用同一个nacos管理各自的配置,可通过 namespace隔离。不同的命名空间下,可以存在相同名称的配置分组(Group) 或 配置集。
4.2 命名空间管理
4.2.1namespace 隔离设计
namespace 的设计是 nacos 基于此做多环境以及多用户进行隔离,不同的开发环境就是创建不同的namespace,每个用户也有自己的namespace
新建命名空间
在编写程序获取配置集过程中没有感知到这个参数的输入,那么 nacos 统一会使用一个默认的 namespace 作为输入,nacos config 会使用一个空字符串作为默认的参数来初始化,对应界面上就是public命名空间。namesace 为 public 是 nacos 的一个保留空间,如果您需要创建自己的 namespace,不要和 public 重名,
Nacos支持 YAML、Properties、TEXT、JSON、XML、HTML 等常见配置格式
可以导入配置、导出配置、也可以克隆配置,克隆到其他命名空间。
Nacos通过提供配置版本管理及其一键回滚能力,帮助用户改错配置的时候能够快速恢复,降低微服务系统在配置 管理上的可用性风险。
4.2.3 监听查询
Nacos提供监听者查询能力,同时提供客户端当前配置的MD5校验值,以便帮助用户更好的检查配 置变更是否推送到 Client 端。
5 Nacos配置管理应用于分布式系统
创建两个微服务,service1、service2,并添加依赖和配置
<!-- SpringCloud Ailibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
server:
port: 56010 #启动端口 命令行注入
spring:
application:
name: service1
cloud:
nacos:
config:
server‐addr: 127.0.0.1:8848 # 配置中心地址
file‐extension: yaml
namespace: c67e4a97‐a698‐4d6d‐9bb1‐cfac5f5b51c4 # 开发环境
group: TEST_GROUP # 测试组