Nacos源码DistroConsistencyServiceImpl
DistroConsistencyServiceImpl
我们来看临时实例的一致性实现:DistroConsistencyServiceImpl类的put方法:
public void put(String key, Record value) throws NacosException {// 先将要更新的实例信息写入本地实例列表onPut(key, value);// 开始集群同步distroProtocol.sync(new DistroKey(key, KeyBuilder.INSTANCE_LIST_KEY_PREFIX), DataOperation.CHANGE,globalConfig.getTaskDispatchPeriod() / 2);
}
这里方法只有两行:
onPut(key, value)
:其中value就是Instances,要更新的服务信息。这行主要是基于线程池方式,异步的将Service信息写入注册表中(就是那个多重Map)distroProtocol.sync()
:就是通过Distro协议将数据同步给集群中的其它Nacos节点
我们先看onPut方法
更新本地实例列表
1)放入阻塞队列
onPut方法如下:
public void onPut(String key, Record value) {// 判断是否是临时实例if (KeyBuilder.matchEphemeralInstanceListKey(key)) {// 封装 Instances 信息到 数据集:DatumDatum<Instances> datum = new Datum<>();datum.value = (Instances) value;datum.key = key;datum.timestamp.incrementAndGet();// 放入DataStoredataStore.put(key, datum);}if (!listeners.containsKey(key)) {return;}// 放入阻塞队列,这里的 notifier维护了一个阻塞队列,并且基于线程池异步执行队列中的任务notifier.addTask(key, DataOperation.CHANGE);
}
notifier的类型就是DistroConsistencyServiceImpl.Notifier
,内部维护了一个阻塞队列,存放服务列表变更的事件:
addTask时,将任务加入该阻塞队列:
// DistroConsistencyServiceImpl.Notifier类的 addTask 方法:
public void addTask(String datumKey, DataOperation action) {if (services.containsKey(datumKey) && action == DataOperation.CHANGE) {return;}if (action == DataOperation.CHANGE) {services.put(datumKey, StringUtils.EMPTY);}// 任务放入阻塞队列tasks.offer(Pair.with(datumKey, action));
}
Nacos源码DistroConsistencyServiceImpl相关推荐
- Nacos源码系列——第三章(全网最经典的Nacos集群源码主线剖析)
上两个章节讲述了Nacos在单机模式下的服务注册,发现等源码剖析过程,实战当中 其实单机是远远不够的,那么Nacos是如何在集群模式下是如何保证节点状态同步,以及服 务变动,新增数据同步的过程的! ...
- (Nacos源码解析五)Nacos服务事件变动源码解析
Nacos源码解析系列目录 Nacos 源码编译运行 (Nacos源码解析一)Nacos 注册实例源码解析 (Nacos源码解析二)Nacos 服务发现源码解析 (Nacos源码解析三)Nacos 心 ...
- Nacos源码系列——第一章(Nacos核心源码主线剖析上)
在讲具体的源码之前,我有几点想说明下,很多开发可能觉得源码不重要,甚至觉得互联网 的知识,目前够用就可以,也不需要多么精通.的确,在大多数的公司中,你能用你的知识 解决问题就可以,不一定非要涉及到源码 ...
- 全网最火的Nacos源码构建,你找不到第二个有我仔细的!!
本章开始带大家构建Nacos源码,后面我会开始分析Nacos源码的细节,结合本人在工作之余用到的Nacos点点滴滴,如果想和我一起学Nacos,就好好看这篇吧,废话不多说,先告诉你们Nacos怎么通过 ...
- 下载Nacos源码并运行
要研究Nacos源码自然不能用打包好的Nacos服务端jar包来运行,需要下载源码自己编译来运行. 下载Nacos源码 Nacos的GitHub地址:GitHub - alibaba/nacos: a ...
- nacos 启动_【Nacos源码之配置管理 一】阅读源码第一步,本地启动Nacos
前言 在我们去阅读Nacos源码之前,我们得先了解Nacos是干嘛的,以及怎么用,这样有利于我们更容易去理解源码; 查看Nacos的官方文档,我们知道Naocs主要有以下特性: 配置中心 服务注册与发 ...
- 如何访问集群中指定的服务器,【Nacos源码之配置管理 六】集群模式下服务器之间是如何互相感知的...
前言 我们用Nacos当配置中心的时候,上一篇文章中 [Nacos源码之配置管理 五]为什么把配置文件Dump到磁盘中 知道了,所有的配置文件都会Dump到服务器的本地磁盘中, 那么集群模式下: 服务 ...
- nacos源码修改编译(亲测)
nacos源码修改编译 文章目录 nacos源码修改编译 内容概述 源码修改 源码编译 测试 内容概述 生产项目选型时选择nacos作为项目的注册中心,但是由于内网安全要求,用户名和密码必须加密传输, ...
- Nacos源码阅读开篇之下载源码
文章目录 Nacos源码阅读开篇 看源码的方法 nacos服务注册与发现源码剖析 nacos核心功能点 nacos服务端原理 nacos 客户端原理 下载Nacos源码 配置单机启动 Nacos源码阅 ...
最新文章
- 刚学习了linux的DHCP 配置.呵呵.自己上来总结下.
- rsync+inotify实现文件时时单项同步
- vs code 添加jquery的智能提示
- ffmpeg相关资源
- html的table属性笔记
- Bootstrap相关优质项目推荐
- 神经网络drop out
- android flash插件安装失败,安卓手机怎么安装Adobe Flash Player插件
- 【NLP】第6章 使用 Transformer 进行机器翻译
- 删除桌面无法删除的网页快捷方式
- 《走遍美国》MP3 共78集下载地址
- super关键字详解
- 技术牛人---章文嵩博士---做系统要先了解业务的需求
- 如何用Excel做动态图表
- 2021年全球AFM探针收入大约230.8百万美元,预计2028年达到374.9百万美元
- 用1元钱买到原价万元的电脑是什么体验?
- mac上配置cordova开发Android平台APP环境
- Excel全自动项目管理甘特图
- 自适应模糊PID控制算法
- MNIST数据集学习