NacosConfig配置中心介绍
一、Nacos配置中心使用
官方文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config Nacos提供了用于存储其他元数据的Key-Value存储,为分布式系统中的外部化配置提供了服务器端和客户端支持,使用Spring Cloud Alibaba Nacos Config ,可以在Nacos Server集中管理你Spring Cloud 应用的外部属性配置。
1.1 Spring Cloud Config对比
三大优势
- SpringCloud config 大部分的场景需要结合Git来使用,动态的变更还需要依赖SpringCloud Bus消息总线通知所有的客户变化。
- SpringCloud config不提供可视化的界面
- nacos config使用长轮询的更新配置,一旦配置有变化后,通知Provider的过程十分迅速,从速度上秒杀SpringCloud原来的Config几条街
对比项目/配置中心
对比项目/配置中心 | spring cloud config | apollo | nacos |
开源时间 | 2014.9 | 2016.5 | 2018.6 |
配置实时推送 | 支持(git) | 支持(Http长轮询) | 支持(Http长轮询1s内) |
版本支持 | 支持(git) | 自动配置 | 自动配置 |
配置回滚 | 支持(git) | 支持 | 支持 |
权限管理 | 支持(git) | 支持 | 待支持 |
多集群多环境 | 支持 | 支持 | 支持 |
监听查询 | 支持 | 支持 | 支持 |
数据一致性 | git保证数据一致性,ConfigServer从Git中读取 | 数据库模拟消息队列,Apollo定时读消息 | HTTP异步通知 |
二、 快速开始
2.1 新建配置文件
点击配置管理的小加号➕,实现配置文件的添加。
配置集
一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,-个配置集可能包含了数据源、线程池、日志级别等配置项。
配置集ID
Nacos中的某个配置集的ID。配置集ID是组织划分配置的维度之-。Data ID通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID通常采用类Java包
(如com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。 此命名规则非强制。
配置分组
Nacos中的一组配置集,是组织配置的维度之一。 通过一个有意义的字符串(如Buy或Trade )对配置集进行分组,从而区分Data ID相同的配置集。当您Nacos上创建一个配置时, 如果未填写配置分组的名称,则配置分组的名称默认采用DEFAULT_ GROUP。配置分组的常见场景;不同的应用或组件使用了相同的配置类型,如database_url 配置和MQ topic 配置。
Nacos Config 的Data Id的命名也有规范,一般都是:
NameSpace:代表不同的环境,如开发,生产,测试等环境。
Group:代表着项目,如xxx医疗项目,xxx电商项目
Data Id:每个项目下往往有若干个工程,每个配置集的(Data id)是一个工程的主配置文件
新建一个配置
当我们点击下面的发布后,就可以在配置列表中查看到这个配置文件
当我们修改了这个配置文件,并再次发布后,通过起Data Id 和Group可以从搜索查看到之前的版本,并选择是否回滚和查看详情。
我们还可以通过其配置中心的列表页面的克隆,完成对配置文件多环境间,多组之间的复制与使用。
2.2 权限配置🔥🔥
要使用Nacos Config的权限管理配置,则必须要开启application.properties的一个配置
注意:如果我们开启了Nacos的权限配置,那么我们以后再写application.properties/application.yml的时候就必须要配置username和password以及namespce,否则就会启动失败
🔥🔥🔥
2.2.1 搭建Nacos-Config服务
先创建两个用户ajin;weiwei。密码都是nacos。
在创建两个命名空间,用于区分不同的开发环境,模拟真实的开发场景。分配权限。
创建一个角色名为dev_readonly的角色,为用户名为ajin的创建
最后,给这个新建的角色名为dev_readonly的角色分配一个dev的只读权限。
登陆查看是否成功
发现public环境下无权限。
dev环境下正常访问
通过Nacos Server 和 Spring-cloud-starter-nacos-config实现配置的动态变更
1)引入依赖
客户都在你的项目中使用nacos来实现应用的外部化配置,
使用groupId和com.alibaba.cloud和artifact ID和spring.cloud.starter.alibaba.nacos.config的stater
2)添加bootstrap.yml配置文件
注意:
一定要使用bootstrap.yml的名字命名nacos-config的配置文件。强制要求
3)启动服务,测试微服务是否使用配置中心的配置文件
4)问题归纳总结与解决
发现,我们的nacos的配置文件并没有被我们的微服务所引用,而是引用了我们的主机的用户名
解决方式:
将配置文件里的spring.application.name的值设置成与Nacos配置中心的配置文件的dataId的之保持一致即可。
再次启动服务就可以获取到nacos配置中心的配置参数。
遇到的小问题: 在我修改完以上的参数后,再次启动却总是无脑的刷新
解决: 修改了其nacos配置中心的配置文件的文件格式与Java应用程序的格式保持一致,同时加上一个参数:spring:cloud:nacos:config:refresh-enabled: false
不是最佳实践:因为这样就相当于关闭了qnacos的自动配置刷新的功能这样的话,我们在使用后面的实时刷新配置监听策略的时候,就不去作用了
缺陷:只能要确保服务名称与配置的daatId保持一致,否则无效
那么如何使当我们的服务名称与配置文件的dataId不一致的时候的解决方法
解决方式:
手动指定dataId