Nacos作为配置中心
简介
Nacos
提供用于存储配置和其他元数据的 K-V
存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
Nacos Config
支持多种方式的配置格式,比如:TEXT
、JSON
、XML
、YAML
、HTML
、PROPERTIES
等。
整合配置中心
增加dependencyManagement
IDEA中创建聚合工程Nacos作为父工程,其pom.xml如下(重点关注
dependencyManagement
配置)
1 | <dependencyManagement> |
导入POM文件
在子模块引入配置中心的依赖
1 | <dependency> |
新建配置
在Nacos-Server中新建配置,其中Data ID它的定义规则是:
${prefix}-${spring.profile.active}.${file-extension}
- nacos 会去找
${prefix}-${spring.profiles.active}.${file-extension}
的配置文件 prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
即为当前环境对应的 profile, 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
这里我创建Data Id 为order-server.properties
的配置文件,其中Group为默认的DEFAULT_GROUP
,配置文件的格式也相应的选择properties
,其内添加配置api.version=1.0.0
,如图所示
bootstrap引导配置
Nacos Config
相关的配置必须在bootstrap.yml
或者bootstrap.properties
文件内添加。
1 | # 配置中心url |
我们没有配置spring.profiles.active配置,这样他会自动去找order-server.properties配置文件
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
上面的配置是为了保证服务的正常注册和配置获取,以及配置DataID
的正确性
代码配置
OrderServiceImpl 引用配置中心配置
api.version
其中通过
@Value
注解,去读取key为api.version
的配置的值,并通过/getVersion接口返回。
1 |
|
OrderService
1 |
|
启动类配置
启动类只要引入@SpringBootApplication注解就可以完成配置中心启动
1 |
|
启动测试
访问测试接口进行测试 http://localhost:8083/order/version
已经可以进行启动加载动态配置了 但是还是不能进行动态修改配置
自动更新配置
加入@RefreshScope
加入
@RefreshScope
注解,可以使当前类下的配置支持动态更新。
1 |
|
@RefreshScope在这里的作用就是让配置内容支持动态刷新,也就是当应用运行中,我们在Nacos控制台修改了配置之后这里也会动态的更新。
修改nacos配置
修改nacos配置文件将配置文件改为1.2.0
控制台进行了更新
1 | 2020-06-04 11:08:56.685 INFO 9900 --- [-127.0.0.1_8848] o.s.c.e.event.RefreshEventListener : Refresh keys changed: [api.version] |
接口测试
访问接口测试
小结
通过上面的测试,可见Nacos做配置中心,在SpringCloud项目中,也可以做到无缝衔接,切换到Nacos可以说知识修改配置的问题,成本也很低
项目的其他配置不变,只需要指定配置中心地址,同时将配置文件外部管理。
数据持久化
在之前的教程中,我们对于Nacos服务端自身并没有做过什么特殊的配置,一切均以默认的单机模式运行,完成了上述所有功能的学习。但是,Nacos的单机运行模式仅适用于学习与测试环境,对于有高可用要求的生产环境显然是不合适的。那么,我们是否可以直接启动多个单机模式的Nacos,然后客户端指定多个Nacos节点就可以实现高可用吗?答案是否定的。
在搭建Nacos集群之前,我们需要先修改Nacos的数据持久化配置为MySQL存储。默认情况下,Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只要支持MySQL的存储。
安装数据库
目前Nacos仅支持
Mysql
数据库,且版本要求:5.6.5+
初始化数据库
Nacos的数据库脚本文件在我们下载Nacos-server时的压缩包中就有
进入nacos-server\nacos\conf
目录,初始化文件:nacos-mysql.sql
此处我创建一个名为 nacos
的数据库,然后执行初始化脚本,成功后会生成 12
张表
修改配置文件
这里是需要修改Nacos-server的配置文件
Nacos-server其实就是一个Java工程或者说是一个Springboot项目,他的配置文件在nacos-server\nacos\conf
目录下,名为 application.properties
,在文件底部添加数据源配置:
1 | #*************** Config Module Related Configurations ***************# |
启动Nacos-server
先启动Nacos-server,启动方式不变,直接双击执行
nacos-server\nacos\bin
下的startup.cmd
文件
启动成功后进入Nacos控制台,此时的Nacos控制台中焕然一新,之前的数据都不见了
因为加入了新的数据源,Nacos从mysql中读取所有的配置文件,而我们刚刚初始化的数据库是干干净净的,自然不会有什么数据和信息显示。
添加配置
在公共空间(public)中新建一个配置文件DataID:
order-server.properties
, 配置内容如下:
1 | nacos.share=order-server:1.0.0 |
验证是否持久化到数据库中
观察数据库
mynacos
中的数据库表config_info
, 如下
小结
Nacos通过集中式存储来保证数据的持久化,同时也为Nacos集群部署奠定了基础
试想一下,如果我们以之前的方式启动Nacos,如果想组建Nacos集群,那各个节点中的数据唯一性就是最大的问题
Nacos采用了单一数据源,直接解决了分布式和集群部署中的一致性问题。