diamond-client获取配置信息
DiamondManager manager = new DefaultDiamondManager("1", new ManagerListener() {@Overridepublic Executor getExecutor() {return null;}@Overridepublic void receiveConfigInfo(String configInfo) {System.out.println("receive config: " + configInfo);}
});
String configInfo = manager.getAvailableConfigureInfomation(1000);

配置文件:

diamond.properties

diamond.port=8081
diamond.config.ip=192.168.2.183

配置文件的解析在DiamondConfigure.java的loadConfig()方法

private void loadConfig() {URL url = this.getClass().getClassLoader().getResource("diamond.properties");if (url != null) {File file = new File(url.getFile());Properties prop = new Properties();try {prop.load(new FileInputStream(file));configServerAddress = prop.getProperty(Constants.CONF_KEY_CONFIG_IP, Constants.DEFAULT_DOMAINNAME);String portStr = prop.getProperty(Constants.CONF_KEY_PORT, "8080");try {port = Integer.parseInt(portStr);} catch (NumberFormatException nfe) {port = 8080;}//新增configServerPort=port;} catch (IOException e) {}}
}

启动订阅者DefaultDiamondSubscriber.java的start()方法

获取server服务器地址在ServerAddressProcessor.java的synAcquireServerAddress()和asynAcquireServerAddress()方法

创建了一个线程每300s刷新一次,请求内容存放在System.getProperty("user.home")\diamond\ServerAddress文件中

调用diamond-server的/url.do接口获取数据

客户端动态读取配置文件

间隔为15s检测一次

扫描顺序为:本地data文件、diamond服务端、本地snapshot文件

调用DefaultDiamondSubscriber.java的getProbeUpdateString()方法获取请求参数,格式为:1DEFAULT_GROUPd8a6e29458f5a2bcadc1177cd83bb4e0(dataId++group++md5)

请求diamond-server的/config.co接口,

diamond-server

contentMD5Cache的数据是TimerTaskService中通过@PostConstruct标签被spring扫描进去的,创建线程池,每10分钟dump一遍数据到contentMD5Cache中,diamond-server系统中维护配置内容会修改contentMD5Cache数据。

系统维护的代码最后调用的configService.updateConfigInfo(String dataId, String group, String content)修改的。

diamond-server集群相互同步配置

集群服务器配置在node.properties里面

通过发送http请求调用各个节点服务的/diamond-server/notify.do?method=notifyConfigInfo&dataId=&group=接口进行通知修改

此处存在一个问题,集群数据同步的时候,连接不同的mysql数据库,mysql数据库的数据需要自己同步

diamond源码解析相关推荐

  1. 谷歌BERT预训练源码解析(二):模型构建

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_39470744/arti ...

  2. 谷歌BERT预训练源码解析(三):训练过程

    目录 前言 源码解析 主函数 自定义模型 遮蔽词预测 下一句预测 规范化数据集 前言 本部分介绍BERT训练过程,BERT模型训练过程是在自己的TPU上进行的,这部分我没做过研究所以不做深入探讨.BE ...

  3. 谷歌BERT预训练源码解析(一):训练数据生成

    目录 预训练源码结构简介 输入输出 源码解析 参数 主函数 创建训练实例 下一句预测&实例生成 随机遮蔽 输出 结果一览 预训练源码结构简介 关于BERT,简单来说,它是一个基于Transfo ...

  4. Gin源码解析和例子——中间件(middleware)

    在<Gin源码解析和例子--路由>一文中,我们已经初识中间件.本文将继续探讨这个技术.(转载请指明出于breaksoftware的csdn博客) Gin的中间件,本质是一个匿名回调函数.这 ...

  5. Colly源码解析——结合例子分析底层实现

    通过<Colly源码解析--框架>分析,我们可以知道Colly执行的主要流程.本文将结合http://go-colly.org上的例子分析一些高级设置的底层实现.(转载请指明出于break ...

  6. libev源码解析——定时器监视器和组织形式

    我们先看下定时器监视器的数据结构.(转载请指明出于breaksoftware的csdn博客) /* invoked after a specific time, repeatable (based o ...

  7. libev源码解析——定时器原理

    本文将回答<libev源码解析--I/O模型>中抛出的两个问题.(转载请指明出于breaksoftware的csdn博客) 对于问题1:为什么backend_poll函数需要指定超时?我们 ...

  8. libev源码解析——I/O模型

    在<libev源码解析--总览>一文中,我们介绍过,libev是一个基于事件的循环库.本文将介绍其和事件及循环之间的关系.(转载请指明出于breaksoftware的csdn博客) 目前i ...

  9. libev源码解析——调度策略

    在<libev源码解析--监视器(watcher)结构和组织形式>中介绍过,监视器分为[2,-2]区间5个等级的优先级.等级为2的监视器最高优,然后依次递减.不区分监视器类型和关联的文件描 ...

  10. libev源码解析——监视器(watcher)结构和组织形式

    在<libev源码解析--总览>中,我们介绍了libev的一些重要变量在不同编译参数下的定义位置.由于这些变量在多线程下没有同步问题,所以我们将问题简化,所提到的变量都是线程内部独有的,不 ...

最新文章

  1. Webdriver定位不到元素的解决办法
  2. 4G最快网速相当于30M宽带
  3. pcb入门之完整原理图绘制过程
  4. 趣链 BitXHub跨链平台 (1)技术架构
  5. JavaScript字符串操作方法大全,包含ES6方法
  6. brew install php55 报错 clang: error
  7. java如何对一个表达式开根号_作为一个零基础的新手,如何系统的自学Java和JavaEE开发技术?...
  8. 云服务器拷贝文件大小,如何从云服务器上拷贝大文件
  9. 明年5G智能手机大爆发!出货量惊人
  10. shell学习之获取用户的输入命令read
  11. C语言项目实战—坦克大战
  12. 浙江大学计算机答辩模板,浙江大学 答辩通用模板
  13. Python常用音频库
  14. windows系统漏洞修复CVE-2016-2183,CVE-2013-2566,CVE-2015-2808
  15. C++生成GIF小结
  16. oracle的空间字段、空间函数,空间数据类型
  17. 【C++程序设计Ⅱ 兼谈对象模型 ——侯捷大师】心得摘要
  18. 浅谈产业界与学术界的合作研究
  19. 【SysML】模型图概览
  20. Unity 报错处理

热门文章

  1. 豆瓣8.0高分电影~渣男人格之《剧场》追剧后感
  2. 外包被辞,太心酸了!
  3. 思科实验4.网络层:路由器IP地址配置
  4. Deep domain generalization combining a priori diagnosis knowledge阅读笔记
  5. 如何用python批量下载数据_如何基于Python批量下载音乐
  6. undefined是什么意思啊
  7. 解决ubuntu无法连接网络问题
  8. 网络应用的基本原理(基础 !非常重要!)
  9. 时间漩涡的世界 (三)
  10. php revel,Revel框架安装