diamond源码阅读-循环探测配置信息是否变化rotateCheckConfigInfo
2016-11-07 00:00
459 查看
rotateCheckConfigInfo 这是一个定时任务,循环调用
200 getSuccess
获取配置信息,MD5校验,lastModifiedHeader等,放到本地缓存contentCache,设置新的消息轮询间隔时间
304 MD5校验 设置新的消息轮询间隔时间
404 删除本地快照
503 获取下一个服务器地址
/** * 循环探测配置信息是否变化,如果变化,则再次向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.co200 getSuccess
获取配置信息,MD5校验,lastModifiedHeader等,放到本地缓存contentCache,设置新的消息轮询间隔时间
304 MD5校验 设置新的消息轮询间隔时间
404 删除本地快照
503 获取下一个服务器地址
3 检查本地快照,从本地快照获取信息checkSnapshot,触发监听器
4 重复以上过程,循环检测rotateCheckConfigInfo();
相关文章推荐
- diamond源码阅读-循环探测配置信息是否变化rotateCheckConfigInfo
- diamond源码阅读-循环探测配置信息是否变化rotateCheckConfigInfo
- openstack源码阅读笔记2 配置与oslo_config
- libevent源码分析(5)--2.1.8--libevent配置信息对象struct event_config的申请和释放函数分析
- ****CI框架源码阅读笔记7 配置管理组件 Config.php
- CI框架源码阅读笔记7 配置管理组件 Config.php
- NGINX----源码阅读---config配置脚本
- CI框架源码阅读笔记7 配置管理组件 Config.php
- CI框架源码阅读笔记7 配置管理组件 Config.php
- 获取web.config的配置信息
- linux源码阅读(1):配置 lxr和glimpse
- 使用asp.net2.0或3.5编程加密、解密web.config中的配置信息
- DotText源码学习——从配置文件Web.config入手(一)
- DotText源码学习——从配置文件Web.config入手(一)
- ASP.NET中获取Web.Config配置信息
- 通过配置JsonConfig过滤掉有可能引起循环的字段
- web.config配置信息
- 在web.config中配置数据库连接信息
- 非典型2D游戏引擎 Orx 源码阅读笔记(5) core部分(config,event)
- C#修改app.config配置文件信息