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的访问端口  在bootstrap.properties 中配置 

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

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

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

11282109

增加上yaml扩展名

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

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

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

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

不会再加载properties文件。

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

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

spring.profiles.active=prod

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

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

分开不同环境 prod

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

spring.cloud.nacos.config.group=DEFAULT_GROUP

11282138

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

例如 所有项目共享一个redis

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

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

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

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

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

动态监听的方式

动态监听-Push

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

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

动态监听pull

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

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

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

源码分析

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

NacosConfigAutoConfiguration类有个方法 nacosConfigProperties

返回一个NacosConfigProperties对象

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

对应前缀

11282330

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

下一个关键的类   

NacosConfigAutoConfiguration类的58行 叫NacosConfigManager

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

createConfigService方法 在NacosConfigManager类的49行 

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

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

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

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

再调用getConstructor构造方法

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

worker new了一个ClientWorker

在ClientWorker中进行初始化

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

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

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

在ClientWorker中进行初始化

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

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

11292313

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

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

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

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

在run方法中 cacheMap中缓存了所有的配置

checkLocalConfig//

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

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值