⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 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很重要,那么自然是要持久化到文件了。