当前位置: 首页 > news >正文

微服务-微服务Nacos配置中心

 1.1 配置中心架构

1.2 Config Client源码分析

配置中心核心接口ConfigService
public class ConfigServerDemo {public static void main(String[] args) throws NacosException, InterruptedException {String serverAddr = "localhost";String dataId = "nacos-config-demo.yaml";String group = "DEFAULT_GROUP";Properties properties = new Properties();properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);//获取配置服务ConfigService configService = NacosFactory.createConfigService(properties);//获取配置String content = configService.getConfig(dataId, group, 5000);System.out.println(content);//注册监听器configService.addListener(dataId, group, new Listener() {@Overridepublic void receiveConfigInfo(String configInfo) {System.out.println("===recieve:" + configInfo);}@Overridepublic Executor getExecutor() {return null;}});//发布配置//boolean isPublishOk = configService.publishConfig(dataId, group, "content");//System.out.println(isPublishOk);//发送properties格式configService.publishConfig(dataId,group,"common.age=30", ConfigType.PROPERTIES.getType());Thread.sleep(3000);content = configService.getConfig(dataId, group, 5000);System.out.println(content);//        boolean isRemoveOk = configService.removeConfig(dataId, group);
//        System.out.println(isRemoveOk);
//        Thread.sleep(3000);//        content = configService.getConfig(dataId, group, 5000);
//        System.out.println(content);
//        Thread.sleep(300000);}
}

获取配置

        获取配置的主要方法是 NacosConfigService 类的 getConfig 方法 ,通常情况下该方法直接从本 地文件中取得配置的值,如果本地文件不存在或者内容为空,则再通过grpc从远端拉取配置,并保存 到本地快照中。

 

注册监听器

        配置中心客户端会通过对配置项注册监听器达到在配置项变更的时候执行回调的功能。

     

ConfigService#getConfigAndSignListener
ConfigService#addListener

        Nacos 可以通过以上方式注册监听器,它们内部的实现均是调用 ClientWorker 类的 addCacheDataIfAbsent。其中 CacheData 是一个维护配置项和其下注册的所有监听器的实例,所有的 CacheData 都保存在 ClientWorker 类中的原子 cacheMap 中,其内部的核心成员有:

1.3 Config Server源码分析

配置dump

服务端启动时就会依赖 DumpService 的 init 方法,从数据库中 load 配置存储在本地磁盘上,并将一些重要的元信息例如 MD5 值缓存在内存中。服务端会根据心跳文件中保存的最后一次心跳时间,来判断到底是从数据库 dump 全量配置数据还是部分增量配置数据(如果机器上次心跳间隔是 6h 以内的话)。

        全量 dump 当然先清空磁盘缓存,然后根据主键 ID 每次捞取一千条配置刷进磁盘和内存。增量 dump 就是捞取最近六小时的新增配置(包括更新的和删除的),先按照这批数据刷新一遍内存和文件,再根据内存里所有的数据全量去比对一遍数据库,如果有改变的再同步一次,相比于全量 dump 的话会减少一定的数据库 IO 和磁盘 IO 次数。

配置发布

        发布配置的代码位于 ConfigController#publishConfig中。集群部署,请求一开始也只会打到一台机器,这台机器将配置插入Mysql中进行持久化。服务端并不是针对每次配置查询都去访问 MySQL ,而是会依赖 dump 功能在本地文件中将配置缓存起来。因此当单台机器保存完毕配置之后,需要通知其他机器刷新内存和本地磁盘中的文件内容,因此它会发布一个名为 ConfigDataChangeEvent 的事件,这个事件会通过grpc调用通知所有集群节点(包括自身),触发本地文件和内存的刷新。

http://www.lryc.cn/news/302635.html

相关文章:

  • 配置Python环境及job运行的虚拟环境
  • 【Java】图解 JVM 垃圾回收(二):垃圾收集器、Full GC
  • Opencv绘图之rectangle、circle、line、ellipse、Rect、RotatedRect、Point
  • HTML 字符实体参考清单
  • 设计模式二:代理模式
  • php使用get_browser()函数将移动端和pc端分开
  • 更改WordPress作者存档链接author和Slug插件Edit Author Slug
  • RISCV——Spinlock锁的理解
  • 阿里云幻兽帕鲁Windows 服务器怎么下载存档?
  • ArcGIS API for JavaScript 4.X 本地部署(js,字体)
  • 202427读书笔记|《猫的自信:治愈系生活哲学绘本》——吸猫指南书,感受猫咪的柔软慵懒与治愈
  • 数据结构链表力扣例题AC(2)——代码以及思路记录
  • C++面试宝典第30题:分发饼干
  • 文件包含+文件上传漏洞(图片马绕过)
  • 华为配置旁挂二层组网隧道转发示例
  • Postgresql源码(123)事务提交时三段资源释放分析ResourceOwnerRelease
  • 电脑文件误删除如何恢复?2024最新三种恢复方法
  • Netty应用——Google Protobuf强化篇(二十)
  • SpringAMQP开启“可靠性”机制
  • 戴尔Dell R740服务器开机冒烟亮黄灯故障维修
  • 【阅读笔记】空域保边降噪《Side Window Filtering》
  • vue3前端excel导出;组件表格,自定义表格导出;Vue3 + xlsx + xlsx-style
  • npm install一直卡在 sill idealTree buildDeps
  • spring boot rabbitmq常用配置
  • MySQL学习记录——십삼 视图及用户、权限管理
  • PyCharm 自动添加文件头注释
  • 用HTML Canvas和JavaScript创建美丽的花朵动画效果
  • java----js常用的api
  • unity 使用VS Code 开发,VS Code配置注意事项
  • 领域驱动设计(Domain Driven Design)