Nacos作为配置中心的一些知识一

11271626

第一个知识点 配置中心存在的意义

问:配置中心拿来干嘛的?

答:微服务架构中,每个微服务都需要一个配置文件。①会有n个微服务②每个微服务都有开发,生产,测试三个运行环境③每个微服务会布置到m台机器上。总共n*3*m个配置文件。其实这些配置文件的内容呢,很多是重复的。触发关键词:重复,所以把相同的内容提取出来,放配置中心里,统一管理。

微服务中配置文件的问题

配置文件数量太多,而且文件里面的内容有很多重复的

业界常用的配置中心

  • Apollo

1.统一管理不同环境、不同集群的配置

2.配置修改实时生效(热发布)

3.版本发布管理

4.灰度发布

5.权限管理、发布审核、操作审计

6.提供开放平台API

  • Disconf  百度的,用的少
  • SpringCloud Config  spring自带的,缺少可视化界面,配置不实时生效,需要重启,比较麻烦
  • Nacos

第二个知识点 Nacos安装以及编译

第三个知识点 Nacos Config数据模型

Namespace(区分不同运行环境,生产和测试一般会隔离:Dev/Test/Prod)

下有Group(某一类分成组,比如中间件配置,数据库配置)

下有DataId(某个项目具体的配置文件)

第四个知识点 Nacos集成springboot实现统一配置管理

第一步 引入依赖

Nacos作为配置中心的一些知识一_第1张图片

第二步 加注解 这里不需要

第三步 加配置 

配置Nacos的访问端口  在bootstrap.properties 中配置 

Nacos作为配置中心的一些知识一_第2张图片

增加RefreshScope注解,实现自动刷新功能

Nacos作为配置中心的一些知识一_第3张图片

没有指定加载什么配置时,默认加载下面两个配置 properties

优先级的问题:后面会把前面数据的覆盖掉

11282109

增加上yaml扩展名

spring.cloud.nacos.donfig.file-extension=yaml

问:加上yaml扩展名后,会增加加载哪些扩展文件捏?

Nacos作为配置中心的一些知识一_第4张图片

访问的信息是nacos中的nacos-config.yaml

Nacos作为配置中心的一些知识一_第5张图片

查看日志,发现先加载nacos-config ,再加载配置的扩展名 nacos-config.yaml,yaml里的信息把nacos-config里的信息进行覆盖。

不会再加载properties文件。

Nacos作为配置中心的一些知识一_第6张图片

下一个小知识点   指定环境为生产环境

规则为 应用名称+扩展名+文件后缀名   优先级比之前的文件都要高

spring.profiles.active=prod

Nacos作为配置中心的一些知识一_第7张图片

下一个知识点 指定不同的命名空间  

spring.cloud.nacos.config.namespace=5c2bd40b

Nacos作为配置中心的一些知识一_第8张图片

分开不同环境 prod

Nacos作为配置中心的一些知识一_第9张图片

下一个知识点 配置组 一般使用默认组 不另设分组  除非配置特别多

spring.cloud.nacos.config.group=DEFAULT_GROUP

Nacos作为配置中心的一些知识一_第10张图片

11282138

自定义data ID配置 共享配置 (sharedConfigs)

例如 所有项目共享一个redis

Nacos作为配置中心的一些知识一_第11张图片

下一个知识点 扩展配置(extensionConfigs)

Nacos作为配置中心的一些知识一_第12张图片

扩展配置优先级大于共享配置

所有配置文件的优先级如下所示,前面的先加载,后面的再加载,然后把前面的覆盖了

若发现自己的配置没有生效,可以检查一下自己的配置是否被别人所覆盖

Nacos作为配置中心的一些知识一_第13张图片

第五个知识点 Nacos config动态刷新实现原理解析

动态监听的方式

动态监听-Push

方式1 push :例如,需求是:一个客户端需要发消息给另一个客户端

一个客户端把消息发给服务器后,服务器直接立即把消息发送给对应的客户端。为了达到立即发送的目标,需要维持长连接。同时使用心跳机制确认客户端是否存活。

Nacos作为配置中心的一些知识一_第14张图片

动态监听pull

方式2 pull :拉 服务端不主动推送消息 ,客户端每隔一段时间间隔去请求一次服务端,实时性无法保证

Nacos作为配置中心的一些知识一_第15张图片

动态刷新流程图(长轮询机制)

延迟30秒是为了减少空轮询

Nacos作为配置中心的一些知识一_第16张图片

源码分析

入口  加载的自动装配类如下   重点是NacosConfigAutoConfiguration类

Nacos作为配置中心的一些知识一_第17张图片

NacosConfigAutoConfiguration类有个方法 nacosConfigProperties

返回一个NacosConfigProperties对象

Nacos作为配置中心的一些知识一_第18张图片

NacosConfigProperties类里定义一个属性PREFIX,对应在配置文件里的配置

Nacos作为配置中心的一些知识一_第19张图片

对应前缀

Nacos作为配置中心的一些知识一_第20张图片

11282330

NacosConfigProperties类里定义了相关的属性 serverAddr username password encode等参数

Nacos作为配置中心的一些知识一_第21张图片

下一个关键的类   

NacosConfigAutoConfiguration类的58行 叫NacosConfigManager

Nacos作为配置中心的一些知识一_第22张图片

NacosConfigManager类的构造方法里(39行) 调用了一个方法 叫createConfigService 给它传一个参数 nacosConfigProperties,把相应的配置信息传进来了

Nacos作为配置中心的一些知识一_第23张图片

createConfigService方法 在NacosConfigManager类的49行 

调用了NacosFactory.createConfigService方法,创建一个服务

Nacos作为配置中心的一些知识一_第24张图片

NacosFactory类43行  的createConfigService方法 调用 ConfigFactory.createConfigService()方法,传入参数 properties

Nacos作为配置中心的一些知识一_第25张图片

ConfigFactory类的39行 是 createConfigService()方法 用class.forName反射调用

com.alibaba.nacos.client.config.NacosConfigService类

再调用getConstructor构造方法

Nacos作为配置中心的一些知识一_第26张图片

构造方法里边创建了两个重要的类agent,用于发送http请求 和worker

worker new了一个ClientWorker

Nacos作为配置中心的一些知识一_第27张图片

在ClientWorker中进行初始化

初始化以下参数:①初始化超时时间30秒

Nacos作为配置中心的一些知识一_第28张图片

还是在ClientWorker类,第556行 定义超时时间 

Nacos作为配置中心的一些知识一_第29张图片

CONFIG_LONG_POLL_TIMEOUT定义在Constants里边,单位毫秒,30000毫秒

Nacos作为配置中心的一些知识一_第30张图片

在ClientWorker中进行初始化

初始化以下参数:② 两个线程池 创建两个线程

Nacos作为配置中心的一些知识一_第31张图片

进行本地配置检查,延迟10ms执行,调用方法checkConfiguration

Nacos作为配置中心的一些知识一_第32张图片

11292313

方法checkConfigInfo()在ClientWorker.java类的366行

listenerSize是监听到的所有的配置的数量

所有的配置拉过来,按3000分成一个长链接LongPollingRunable()

Nacos作为配置中心的一些知识一_第33张图片

LongPollingRunnable类在ClientWorker.java的577行,实现了Runnable接口,是一个线程

Nacos作为配置中心的一些知识一_第34张图片

在run方法中 cacheMap中缓存了所有的配置Nacos作为配置中心的一些知识一_第35张图片

checkLocalConfig//

检查内存中的缓存信息与文件中的缓存信息是否一致,并进行相应处理

Nacos作为配置中心的一些知识一_第36张图片

你可能感兴趣的:(java,spring,boot,开发语言)