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相关推荐

  1. Nacos源码系列——第三章(全网最经典的Nacos集群源码主线剖析)

    上两个章节讲述了Nacos在单机模式下的服务注册,发现等源码剖析过程,实战当中 其实单机是远远不够的,那么Nacos是如何在集群模式下是如何保证节点状态同步,以及服 务变动,新增数据同步的过程的!   ...

  2. (Nacos源码解析五)Nacos服务事件变动源码解析

    Nacos源码解析系列目录 Nacos 源码编译运行 (Nacos源码解析一)Nacos 注册实例源码解析 (Nacos源码解析二)Nacos 服务发现源码解析 (Nacos源码解析三)Nacos 心 ...

  3. Nacos源码系列——第一章(Nacos核心源码主线剖析上)

    在讲具体的源码之前,我有几点想说明下,很多开发可能觉得源码不重要,甚至觉得互联网 的知识,目前够用就可以,也不需要多么精通.的确,在大多数的公司中,你能用你的知识 解决问题就可以,不一定非要涉及到源码 ...

  4. 全网最火的Nacos源码构建,你找不到第二个有我仔细的!!

    本章开始带大家构建Nacos源码,后面我会开始分析Nacos源码的细节,结合本人在工作之余用到的Nacos点点滴滴,如果想和我一起学Nacos,就好好看这篇吧,废话不多说,先告诉你们Nacos怎么通过 ...

  5. 下载Nacos源码并运行

    要研究Nacos源码自然不能用打包好的Nacos服务端jar包来运行,需要下载源码自己编译来运行. 下载Nacos源码 Nacos的GitHub地址:GitHub - alibaba/nacos: a ...

  6. nacos 启动_【Nacos源码之配置管理 一】阅读源码第一步,本地启动Nacos

    前言 在我们去阅读Nacos源码之前,我们得先了解Nacos是干嘛的,以及怎么用,这样有利于我们更容易去理解源码; 查看Nacos的官方文档,我们知道Naocs主要有以下特性: 配置中心 服务注册与发 ...

  7. 如何访问集群中指定的服务器,【Nacos源码之配置管理 六】集群模式下服务器之间是如何互相感知的...

    前言 我们用Nacos当配置中心的时候,上一篇文章中 [Nacos源码之配置管理 五]为什么把配置文件Dump到磁盘中 知道了,所有的配置文件都会Dump到服务器的本地磁盘中, 那么集群模式下: 服务 ...

  8. nacos源码修改编译(亲测)

    nacos源码修改编译 文章目录 nacos源码修改编译 内容概述 源码修改 源码编译 测试 内容概述 生产项目选型时选择nacos作为项目的注册中心,但是由于内网安全要求,用户名和密码必须加密传输, ...

  9. Nacos源码阅读开篇之下载源码

    文章目录 Nacos源码阅读开篇 看源码的方法 nacos服务注册与发现源码剖析 nacos核心功能点 nacos服务端原理 nacos 客户端原理 下载Nacos源码 配置单机启动 Nacos源码阅 ...

最新文章

  1. 刚学习了linux的DHCP 配置.呵呵.自己上来总结下.
  2. rsync+inotify实现文件时时单项同步
  3. vs code 添加jquery的智能提示
  4. ffmpeg相关资源
  5. html的table属性笔记
  6. Bootstrap相关优质项目推荐
  7. 神经网络drop out
  8. android flash插件安装失败,安卓手机怎么安装Adobe Flash Player插件
  9. 【NLP】第6章 使用 Transformer 进行机器翻译
  10. 删除桌面无法删除的网页快捷方式
  11. 《走遍美国》MP3 共78集下载地址
  12. super关键字详解
  13. 技术牛人---章文嵩博士---做系统要先了解业务的需求
  14. 如何用Excel做动态图表
  15. 2021年全球AFM探针收入大约230.8百万美元,预计2028年达到374.9百万美元
  16. 用1元钱买到原价万元的电脑是什么体验?
  17. mac上配置cordova开发Android平台APP环境
  18. Excel全自动项目管理甘特图
  19. 自适应模糊PID控制算法
  20. MNIST数据集学习

热门文章

  1. C++ template 学习归纳2
  2. 创建RGB、CMYK颜色分量圆代码
  3. C#特性(属性)Attribute
  4. 翻译(六)——T-SQL的进阶之路:超过基础的2级水平:写子查询
  5. 统计十进制数的二进制数1的个数
  6. 省常中模拟 Test4
  7. IE中a标签绝对定位时才生的bug
  8. 转载一些关于博客的文章
  9. 【echarts】echarts开发详解
  10. 记录一下pom文件scope各种配置所作的行为