nacos源码分析——raft如何发布内容
2018-08-25 本文已影响49人
黄云斌huangyunbin
在上一篇介绍如何选举后https://www.jianshu.com/p/5a2d965174ae,发布内容就相对简单很多了。
发布内容的入口
![](https://img.haomeiwen.com/i7835103/5dd6dfd8d9c00a1a.png)
signalPublish 的很简单
如果自己不是leader就转发给leader
![](https://img.haomeiwen.com/i7835103/65eff3bf82dea3b5.png)
如果自己是leader,就向所有节点发送onPublish请求,注意这里是所有的节点,包括自己。
![](https://img.haomeiwen.com/i7835103/af73bcd909d94638.png)
所以其实还是看onPublish的逻辑了
![](https://img.haomeiwen.com/i7835103/1a7194182a0d85a7.png)
onPublish可以当做是一次心跳了,更新选举检查时间,然后一个重点就是term增加100了。
当然还是就是更新内容了,先写文件,再更新内存缓存。
![](https://img.haomeiwen.com/i7835103/fa1cf20652d8e848.png)
可以看到写文件的时候,一个key就是一个文件,文件的内容就是value这个json
![](https://img.haomeiwen.com/i7835103/f930306ea68e8cff.png)
内存的缓存其实就是一个ConcurrentHashMap
private static ConcurrentMap<String, Datum> datums = new ConcurrentHashMap<String, Datum>();
RaftCore.datums.put(datum.key, datum);
之前也说到这个term很重要,那么自然是要持久化到文件了。
![](https://img.haomeiwen.com/i7835103/f9add0898f5c3db9.png)