heimamq源码--------01-------120

核心的配置:

heimamq源码--------01-------120

刷盘是开的线程刷盘。

代码:

heimamq源码--------01-------120

首先从节点是不能去写的。

heimamq源码--------01-------120

heimamq源码--------01-------120

---120---

看下源码:

heimamq源码--------01-------120

第一步校验。

第二步:进入commitLog.putMessage();

heimamq源码--------01-------120

第三步:拿到映射文件,加锁

heimamq源码--------01-------120

heimamq源码--------01-------120

空或者写满,要创建一个新的。

第四步:写

heimamq源码--------01-------120

进入:

heimamq源码--------01-------120

这一步是走到了这里:

heimamq源码--------01-------120

都写到缓冲区,这个就是堆外申请的缓冲区。写是写到了堆外的缓冲区。

heimamq源码--------01-------120

heimamq源码--------01-------120

heimamq源码--------01-------120

设置:messageId。

heimamq源码--------01-------120

heimamq源码--------01-------120

剩余消息的长度大于总长度就创建新的文件。

获得消在队列的偏移量,知道去哪里写。

heimamq源码--------01-------120

heimamq源码--------01-------120

开始写:

heimamq源码--------01-------120

heimamq源码--------01-------120

heimamq源码--------01-------120

创建新文件。

真正的写:

heimamq源码--------01-------120

heimamq源码--------01-------120

返回给MappFile再返回给commitLog。

heimamq源码--------01-------120

第五步:刷盘

heimamq源码--------01-------120

----121-----

heimamq源码--------01-------120

最终落盘。

heimamq源码--------01-------120

heimamq源码--------01-------120:运行期间的配置信息

heimamq源码--------01-------120:消息索引

索引是以主题为文件夹,每个文件是多个消息队列,存的索引信息。

heimamq源码--------01-------120

heimamq源码--------01-------120:根据消息id或者属性去索引的。

heimamq源码--------01-------120

heimamq源码--------01-------120:看broker是不是正常关闭的。

---

 

----122-----