《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》

摘要: 原创出处 https://www.jianshu.com/p/3e40376a34db 「黄云斌」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

在上一篇介绍如何选举后,发布内容就相对简单很多了。

发布内容的入口

signalPublish 的很简单

如果自己不是leader就转发给leader

如果自己是leader,就向所有节点发送onPublish请求,注意这里是所有的节点,包括自己。

所以其实还是看onPublish的逻辑了

onPublish可以当做是一次心跳了,更新选举检查时间,然后一个重点就是term增加100了。

当然还是就是更新内容了,先写文件,再更新内存缓存。

可以看到写文件的时候,一个key就是一个文件,文件的内容就是value这个json

内存的缓存其实就是一个ConcurrentHashMap

private static ConcurrentMap<String, Datum> datums = new ConcurrentHashMap<String, Datum>();

RaftCore.datums.put(datum.key, datum);

之前也说到这个term很重要,那么自然是要持久化到文件了。

文章目录
  1. 1. 在上一篇介绍如何选举后,发布内容就相对简单很多了。
    1. 1.0.0.1. 如果自己不是leader就转发给leader
    2. 1.0.0.2. 如果自己是leader,就向所有节点发送onPublish请求,注意这里是所有的节点,包括自己。
  • 2. onPublish可以当做是一次心跳了,更新选举检查时间,然后一个重点就是term增加100了。
  • 3. 当然还是就是更新内容了,先写文件,再更新内存缓存。
  • 4. 内存的缓存其实就是一个ConcurrentHashMap
  • 5. 之前也说到这个term很重要,那么自然是要持久化到文件了。