NacosConfig配置中心介绍

一、Nacos配置中心使用

官方文档:​​https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config​​ Nacos提供了用于存储其他元数据的Key-Value存储,为分布式系统中的外部化配置提供了服务器端和客户端支持,使用Spring Cloud Alibaba Nacos Config ,可以在Nacos Server集中管理你Spring Cloud 应用的外部属性配置。

SpringCloud Alibaba-【NacosConfig配置中心】_spring

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 新建配置文件

点击配置管理的小加号➕,实现配置文件的添加。

SpringCloud Alibaba-【NacosConfig配置中心】_微服务_02


配置集

一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,-个配置集可能包含了数据源、线程池、日志级别等配置项。

配置集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)是一个工程的主配置文件

SpringCloud Alibaba-【NacosConfig配置中心】_配置文件_03

新建一个配置

SpringCloud Alibaba-【NacosConfig配置中心】_配置文件_04


当我们点击下面的发布后,就可以在配置列表中查看到这个配置文件

SpringCloud Alibaba-【NacosConfig配置中心】_java_05


当我们修改了这个配置文件,并再次发布后,通过起Data Id 和Group可以从搜索查看到之前的版本,并选择是否回滚和查看详情。

SpringCloud Alibaba-【NacosConfig配置中心】_java_06


我们还可以通过其配置中心的列表页面的克隆,完成对配置文件多环境间,多组之间的复制与使用。

SpringCloud Alibaba-【NacosConfig配置中心】_spring_07

2.2 权限配置🔥🔥

要使用Nacos Config的权限管理配置,则必须要开启application.properties的一个配置

SpringCloud Alibaba-【NacosConfig配置中心】_java_08

注意:如果我们开启了Nacos的权限配置,那么我们以后再写application.properties/application.yml的时候就必须要配置username和password以及namespce,否则就会启动失败🔥🔥🔥

SpringCloud Alibaba-【NacosConfig配置中心】_微服务_09

2.2.1 搭建Nacos-Config服务

先创建两个用户ajin;weiwei。密码都是nacos。

SpringCloud Alibaba-【NacosConfig配置中心】_spring_10


在创建两个命名空间,用于区分不同的开发环境,模拟真实的开发场景。分配权限。

SpringCloud Alibaba-【NacosConfig配置中心】_spring_11


创建一个角色名为dev_readonly的角色,为用户名为ajin的创建

SpringCloud Alibaba-【NacosConfig配置中心】_java_12


最后,给这个新建的角色名为dev_readonly的角色分配一个dev的只读权限。

SpringCloud Alibaba-【NacosConfig配置中心】_微服务_13


登陆查看是否成功

SpringCloud Alibaba-【NacosConfig配置中心】_配置文件_14

发现public环境下无权限。

SpringCloud Alibaba-【NacosConfig配置中心】_配置文件_15

dev环境下正常访问

通过Nacos Server 和 Spring-cloud-starter-nacos-config实现配置的动态变更
1)引入依赖

客户都在你的项目中使用nacos来实现应用的外部化配置,​​使用groupId和com.alibaba.cloud和artifact ID和spring.cloud.starter.alibaba.nacos.config的stater​

<!-- Nacos配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2)添加bootstrap.yml配置文件

server:
port: 8003
spring:
application:
name: config-nacos # 服务的名称
cloud:
nacos:
server-addr: 192.168.188.xxx:8847 # 主机或则配置的nginx的ip地址
username: nacos
password: nacos
config:
namespace:

注意: 一定要使用bootstrap.yml的名字命名nacos-config的配置文件。强制要求

3)启动服务,测试微服务是否使用配置中心的配置文件

@SpringBootApplication
public class StratUp {

public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(StratUp.class, args);
String name = applicationContext.getEnvironment().getProperty("user.name");
String age = applicationContext.getEnvironment().getProperty("user.age");
String gender = applicationContext.getEnvironment().getProperty("user.gender");
System.out.println("user name is "+name+"; user age is "+age+"; user gender is "+gender);
}
}

SpringCloud Alibaba-【NacosConfig配置中心】_spring_16


4)问题归纳总结与解决

发现,我们的nacos的配置文件并没有被我们的微服务所引用,而是引用了我们的主机的用户名
​​解决方式:将配置文件里的spring.application.name的值设置成与Nacos配置中心的配置文件的dataId的之保持一致即可。

SpringCloud Alibaba-【NacosConfig配置中心】_微服务_17


再次启动服务就可以获取到nacos配置中心的配置参数。

遇到的小问题: 在我修改完以上的参数后,再次启动却总是无脑的刷新

SpringCloud Alibaba-【NacosConfig配置中心】_配置文件_18


解决: 修改了其nacos配置中心的配置文件的文件格式与Java应用程序的格式保持一致,同时加上一个参数:​​spring:cloud:nacos:config:refresh-enabled: false​

SpringCloud Alibaba-【NacosConfig配置中心】_java_19

不是最佳实践:因为这样就相当于关闭了qnacos的自动配置刷新的功能这样的话,我们在使用后面的实时刷新配置监听策略的时候,就不去作用了

SpringCloud Alibaba-【NacosConfig配置中心】_spring cloud_20

缺陷:只能要确保服务名称与配置的daatId保持一致,否则无效

那么如何使当我们的服务名称与配置文件的dataId不一致的时候的解决方法

解决方式:手动指定dataId