rotateCheckConfigInfo 这是一个定时任务,循环调用

 /**
* 循环探测配置信息是否变化,如果变化,则再次向DiamondServer请求获取对应的配置信息
*/
private void rotateCheckConfigInfo() {
scheduledExecutor.schedule(new Runnable() {
public void run() {
if (!isRun) {
log.warn("DiamondSubscriber不在运行状态中,退出查询循环");
return;
}
try {
checkLocalConfigInfo();
checkDiamondServerConfigInfo();
checkSnapshot();
}
catch (Exception e) {
e.printStackTrace();
log.error("循环探测发生异常", e);
}
finally {
rotateCheckConfigInfo();
}
} }, bFirstCheck ? 20 : diamondConfigure.getPollingIntervalTime(), TimeUnit.SECONDS);
bFirstCheck = false;
}

1.从本地读取配置信息checkLocalConfigInfo

1.1 读取配置信息

String configInfo = getLocalConfigureInfomation(cacheData);

1.2 将订阅信息抛给客户的监听器

popConfigInfo(cacheData, configInfo);

1.2.1 核心代码

subscriberListener.receiveConfigInfo(configureInfomation);
//发送http请求到服务器获取订阅信息
//取得DefaultDiamondManager的ManagerListener,回调Listener
//并将结果抛给客户的监听器
saveSnapshot(dataId, group, configInfo);
//保存快照到本地

2 从服务器获取配置信息checkDiamondServerConfigInfo

2.1 从DiamondServer获取值变化了的DataID列表

Set<String> updateDataIdGroupPairs =        checkUpdateDataIds(diamondConfigure.getReceiveWaitTime());

2.2 向DiamondServer请求dataId对应的配置信息,并将结果抛给客户的监听器 receiveConfigInfo。以下代码在线程池处理

String configInfo =getConfigureInfomation(cacheData.getDataId(), cacheData.getGroup(),diamondConfigure.getReceiveWaitTime(), true);
popConfigInfo(cacheData, configInfo);

2.2.1 getConfigureInfomation

 String getConfigureInfomation(String dataId, String group, long timeout, boolean skipContentCache) //554行

2.2.1.1 start(); 又调用了一遍。getConfigureInfomation就是在start()里调用的,不明白了。注释掉也正常,因为取数据没有异常。

可能是重新初始化信息,不会使用过期的东西

2.2.1.2 缓存获取到直接返回

使用带有TTL的cache,

2.2.1.3 缓存获取不到从服务器获取,有重试次数

http请求:路径/diamond-server/config.co

  • 200 getSuccess

    获取配置信息,MD5校验,lastModifiedHeader等,放到本地缓存contentCache,设置新的消息轮询间隔时间
  • 304 MD5校验 设置新的消息轮询间隔时间
  • 404 删除本地快照
  • 503 获取下一个服务器地址

3 检查本地快照,从本地快照获取信息checkSnapshot,触发监听器

4 重复以上过程,循环检测rotateCheckConfigInfo();

diamond源码阅读-循环探测配置信息是否变化rotateCheckConfigInfo的更多相关文章

  1. MyCat源码分析系列之——配置信息和启动流程

    更多MyCat源码分析,请戳MyCat源码分析系列 MyCat配置信息 除了一些默认的配置参数,大多数的MyCat配置信息是通过读取若干.xml/.properties文件获取的,主要包括: 1)se ...

  2. diamond源码阅读-diamond-client

    读取数据 DiamondManager manager = new DefaultDiamondManager("DEFAULT_GROUP", "zml", ...

  3. diamond源码阅读-diamond-server

    diamond-server 1 增加一条数据 /diamond-server/admin.do?method=postConfig 1.1 调用 this.configService.addConf ...

  4. diamond源码阅读-获取服务器列表

    serverAddressProcessor public synchronized void start() { if (isRun) { return; } isRun = true; initH ...

  5. diamond源码阅读-目录监控

    PathNode(Path)StandardWatchEventKind(WatchEvent)Watchable(WatchKey WatchService WatchEvent)WatchKey( ...

  6. Spring源码阅读 之 配置的读取,解析

    在上文中我们已经知道了Spring如何从我们给定的位置加载到配置文件,并将文件包装成一个Resource对象.这篇文章我们将要探讨的就是,如何从这个Resouce对象中加载到我们的容器?加载到容器后又 ...

  7. CI框架源码阅读笔记3 全局函数Common.php

    从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap ...

  8. Spring源码阅读笔记

    前言 作为一个Java开发者,工作了几年后,越发觉力有点不从心了,技术的世界实在是太过于辽阔了,接触的东西越多,越感到前所未有的恐慌. 每天捣鼓这个捣鼓那个,结果回过头来,才发现这个也不通,那个也不精 ...

  9. Apollo源码阅读笔记(一)

    Apollo源码阅读笔记(一) 先来一张官方客户端设计图,方便我们了解客户端的整体思路. 我们在使用Apollo的时候,需要标记@EnableApolloConfig来告诉程序开启apollo配置,所 ...

随机推荐

  1. http://blog.csdn.net/rosten/article/details/17068285

    http://blog.csdn.net/rosten/article/details/17068285

  2. 使用MyEclipse创建可执行jar

    MyEclipse请从这里下载: http://pan.baidu.com/s/1o6Jm5vk 具体步骤: 右键点工程->Export->选择Java下面的Runnable Jar Fi ...

  3. Django——django1.6 基于类的通用视图

    最初 django 的视图都是用函数实现的,后来开发出一些通用视图函数,以取代某些常见的重复性代码.通用视图就像是一些封装好的处理器,使用它们的时候只须要给出特定的参数集即可,不必关心具体的实现.各种 ...

  4. python基础语法(四)

    --------------------------------------------接 Python 基础语法(三)---------------------------------------- ...

  5. react-native + teaset(Drawer)实现侧边菜单

    1.代码 /** * 购物车 */ import React, {Component} from 'react'; import { View, Image, } from 'react-native ...

  6. 《Docker 入门与实践》 已经出版了~欢迎有须要的朋友关注。

    在云计算时代.开发人员将应用转移到云上已经攻克了硬件管理的问题,然而软件配置和管理相关的问题依旧存在. Docker的出现正好能帮助软件开发人员开阔思路.尝试新的软件管理方法来解决问题. 通过掌握Do ...

  7. 基于MaterialDesign设计风格的妹纸app的简单实现

    代码地址如下:http://www.demodashi.com/demo/11644.html *今天看了郭神的第二行代码,深深的被MaterialDesign的设计风格所吸引,然后就照例做了一个小D ...

  8. poj 3696 The Luckiest number 欧拉函数在解a^x=1modm的应用

    题意: 给一个L,求长度最小的全8数满足该数是L的倍数. 分析: 转化为求方程a^x==1modm. 之后就是各种数学论证了. 代码: //poj 3696 //sep9 #include <i ...

  9. MVC的优缺点

    MVC的优点 大部分用过程语言比如ASP.PHP开发出来的Web应用,初始的开发模板就是混合层的数据编程.例如,直接向数据库发送请求并用HTML显示,开发速度往往比较快,但由于数据页面的分离不是很直接 ...

  10. css解决方案之css布局

    固定宽度布局解决方案 固定宽度的居中布局 首先我们这里探讨的是我们常用的固定宽度的居中布局,这应该是目前实战中应用的最多的了. 然后从考虑是否应用大背景上我们分为两种,一种是允许整体有一个大背景,一种 ...