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请求并没有通知到其他实例,通过定时任务保证从数据库读取信息,更新缓存信息和写入硬盘文件

最新文章

  1. 【leetcode❤python】 165. Compare Version Numbers
  2. Java for LeetCode 233 Number of Digit One
  3. 《JavaScript高级程序设计》学习笔记12篇
  4. git配置global信息
  5. sublime配置python开发
  6. IO-APIC
  7. 数据结构--队列之C数组实现
  8. mysql 中的 IF 和 IFNULL 用法
  9. Hadoop之Secondary NameNode
  10. windows 7中的windows键相关的快捷键
  11. PAT甲级1049 Counting Ones【规律】
  12. Spring Cloud 微服务中搭建 OAuth2.0 认证授权服务
  13. Spring Boot(十二):Spring Boot 如何测试打包部署
  14. MariaDB中文乱码之解决思路
  15. C# 通过二进制,将多个文件合并为一个。
  16. aiohttp的模板
  17. Linux命令-帮助命令:help
  18. javaee开发工具及环境配置过程
  19. maredit测试
  20. 查看,检查,修复pg的命令

热门文章

  1. css字体font-family
  2. Android画图系列(二)——自己定义View绘制基本图形
  3. 贯通Spark Streaming流计算框架的运行源码
  4. virtualbox虚拟机ubuntu操作系统,设置网络互通、访问,能访问虚拟机swoole的http服务
  5. Dubbo超时重试机制带来的数据重复问题
  6. SRS Audio Sandbox没有声音怎么办
  7. C++——动态分配内存问题
  8. oracle新建一个表空间和用户来測试
  9. Refactoring之——代码的坏味道(二)过大的类 &(三)基本类型偏执
  10. duplicate symbols 错误解决方案