diamond源码阅读-diamond-server
2024-09-01 14:51:26
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请求并没有通知到其他实例,通过定时任务保证从数据库读取信息,更新缓存信息和写入硬盘文件
最新文章
- 【leetcode❤python】 165. Compare Version Numbers
- Java for LeetCode 233 Number of Digit One
- 《JavaScript高级程序设计》学习笔记12篇
- git配置global信息
- sublime配置python开发
- IO-APIC
- 数据结构--队列之C数组实现
- mysql 中的 IF 和 IFNULL 用法
- Hadoop之Secondary NameNode
- windows 7中的windows键相关的快捷键
- PAT甲级1049 Counting Ones【规律】
- Spring Cloud 微服务中搭建 OAuth2.0 认证授权服务
- Spring Boot(十二):Spring Boot 如何测试打包部署
- MariaDB中文乱码之解决思路
- C# 通过二进制,将多个文件合并为一个。
- aiohttp的模板
- Linux命令-帮助命令:help
- javaee开发工具及环境配置过程
- maredit测试
- 查看,检查,修复pg的命令
热门文章
- css字体font-family
- Android画图系列(二)——自己定义View绘制基本图形
- 贯通Spark Streaming流计算框架的运行源码
- virtualbox虚拟机ubuntu操作系统,设置网络互通、访问,能访问虚拟机swoole的http服务
- Dubbo超时重试机制带来的数据重复问题
- SRS Audio Sandbox没有声音怎么办
- C++——动态分配内存问题
- oracle新建一个表空间和用户来測试
- Refactoring之——代码的坏味道(二)过大的类 &;(三)基本类型偏执
- duplicate symbols 错误解决方案