diamond源码阅读-diamond-server
diamond-server
1 增加一条数据 /diamond-server/admin.do?method=postConfig
1.1 调用 this.configService.addConfigInfo(dataId, group, content);
public void addConfigInfo(String dataId, String group, String content) {
ConfigInfo configInfo = new ConfigInfo(dataId, group, content);//md5加密content
// 保存顺序:先数据库,再磁盘
try {
checkParameter(dataId, group, content);//参数校验
persistService.addConfigInfo(configInfo);//插入数据库
// 切记更新缓存
this.contentMD5Cache.put(generateMD5CacheKey(dataId, group), configInfo.getMd5());// key = group + "/" + dataId value=MD5
diskService.saveToDisk(configInfo);//保存到文件
// 通知其他节点() HTTP 方式通知
this.notifyOtherNodes(dataId, group);//http://ip:port/diamond-server/notify.do?method=notifyConfigInfo&dataId=" + dataId + "&group=" + group
}
catch (Exception e) {
log.error("保存ConfigInfo失败", e);
throw new ConfigServiceException(e);
}
}
1.2 其他节点接收到信息后
this.configService.loadConfigInfoToDisk(dataId, group);
public void loadConfigInfoToDisk(String dataId, String group) {
try {
ConfigInfo configInfo = this.persistService.findConfigInfo(dataId, group);//数据库读取配置
if (configInfo != null) {
this.contentMD5Cache.put(generateMD5CacheKey(dataId, group), configInfo.getMd5());//保存到内存 key = group + "/" + dataId value=MD5
this.diskService.saveToDisk(configInfo);//保存到文件
}
else {
// 删除文件
this.contentMD5Cache.remove(generateMD5CacheKey(dataId, group));
this.diskService.removeConfigInfo(dataId, group);
}
}
catch (Exception e) {
log.error("保存ConfigInfo到磁盘失败", e);
throw new ConfigServiceException(e);
}
}
1.3 删除同样是修改数据库,修改内存,修改本地文件,通知其他节点
2 定时任务TimerTaskService DumpConfigInfoTask
如果通过http请求并没有通知到其他实例,通过定时任务保证从数据库读取信息,更新缓存信息和写入硬盘文件
diamond源码阅读-diamond-server的更多相关文章
- diamond源码阅读-diamond-client
读取数据 DiamondManager manager = new DefaultDiamondManager("DEFAULT_GROUP", "zml", ...
- diamond源码阅读-获取服务器列表
serverAddressProcessor public synchronized void start() { if (isRun) { return; } isRun = true; initH ...
- diamond源码阅读-循环探测配置信息是否变化rotateCheckConfigInfo
rotateCheckConfigInfo 这是一个定时任务,循环调用 /** * 循环探测配置信息是否变化,如果变化,则再次向DiamondServer请求获取对应的配置信息 */ private ...
- diamond源码阅读-目录监控
PathNode(Path)StandardWatchEventKind(WatchEvent)Watchable(WatchKey WatchService WatchEvent)WatchKey( ...
- tomcat源码阅读之Server和Service接口解析
tomcat中的服务器组件接口是Server接口,服务接口是Service,Server接口表示Catalina的整个servlet引擎,囊括了所有的组件,提供了一种优雅的方式来启动/关闭Catali ...
- 【原】AFNetworking源码阅读(一)
[原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...
- Android源码阅读 – Zygote
@Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...
- CI框架源码阅读笔记3 全局函数Common.php
从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap ...
- CI框架源码阅读笔记1 - 环境准备、基本术语和框架流程
最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动.最近项目少,总算是有了一些时间去写一些东西.于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时 ...
随机推荐
- 设计工具-MindManager(思维导图)
1,百度百科 http://baike.baidu.com/view/30054.htm?from_id=7153629&type=syn&fromtitle=MindManager& ...
- linux 关闭端口
第一步查看那些程序在使用该端口 netstat -anp或者netstat -tulnp 第二步杀死进程 kill -9 xxx,杀死某个进程 killall 进程名
- Java虚拟机中的栈和堆的定义和区别
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配 ...
- linux基础教程---设置文件的主人、组别
我们在操作linux的是要告诉文件是属于哪个主人的,哪个组别的.这样我们就须要知道该怎样设置": 设置文件的主人.组别 chown: change owner >chown 主人 ...
- Java8 新的日期和时间API(笔记)
LocalDate LocalTime Instant duration以及Period 使用LocalDate和LocalTime //2017-03-20 LocalDate date = Loc ...
- Openfiler 之Linux 安装ISCSI initiator和自动挂载
OPENFILER做TARGET,RED HAT做客户端,如果默认没有安装ISCSI initiator的话,可以在光盘上找到RPM包直接安装.service iscsi start,启动服务,ser ...
- 简单模拟javaScript面向对象
<html> <head> <script type="text/javascript"> if (!Object.create) { Obje ...
- 1高并发server:多路IO之select
1 select A:select能监听的文件描写叙述符个数受限于FD_SETSIZE,一般为1024.单纯改变进程打开 的文件描写叙述符个数并不能改变select监听文件个数 B:解决1024 ...
- centos7 安装及破解 jira 7.3.3
JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域. 同样jira 的运行依赖java环境,上一节已经 ...
- 电脑 F键(功能键)的具体作用
F1:如果你处在一个选定的程序中而需要帮助,那么请按下F1.如果现在不是处在任何程序中,而是处在资源管理器或桌面,那么按下F1就会出现Windows的帮助程序.如果你正在对某个程序进行操作,而想得到W ...