一些基础的功能不做赘述了,增删查改,我们就以添加配置时,做了什么。

首先是检查参数,没问题的话就拼装成ConfigInfo,它的构造方法中会对content进行MD5加密,值会赋给ConfigInfo的属性md5。然后将数据持久化到数据库中。随后将group和dataId组成缓存的key,内容的md5作为value,放入缓存。然后将数据放入磁盘。

modifyMarkCache 是一个锁的功能,如果存储的信息中没有cacheKey的话才可以执行下面的操作,如果存在,那么说明有其他的人在操作同一个group,dataId的数据,就会直接抛出异常。下面我们看正常的流程,找到项目路径中的已group命名的文件夹,不存在就创建,随后找到这个group命名的文件夹中的dataId命名的文件,不存在的话创建(这个文件就是我们要操作,的目标文件),随后根据group和dataId创建临时文件,写入需要的内容。最后将临时文件的内容复制到目标文件中。操作成功后删除临时的文件,在缓存中清除标记。
持久化完成后,就需要通知集群中的其他节点,更新内容了。


拼接参数,调用restful方法。可以看到是遍历得到每一个节点的地址信息,随后调用。调用的方法是notifyConfigInfo。
其实就是这个方法


从数据库中获取到最新的配置,更新缓存,更新磁盘。
总结:
当一个节点的数据发生变化时,先持久化到数据库,再刷新本地缓存,更新服务器的磁盘。随后通知到集群中的其他节点更新。
网友评论