1. checkStoreStatus 状态是否正常
1)判断Broker角色如果是从节点,则无需写入
2)判断当前写入状态如果是正在写入,则不能继续
3)判断系统PageCache缓存去是否占用
2. checkMessag() 检查消息属性
4) 判断消息主题长度是否超过最大限制 (2^7-1)
5)判断消息属性长度是否超过限制
(msg.getPropertiesString() != null && msg.getPropertiesString().length() > Short.MAX_VALUE (2^15-1)
6. 将消息写入CommitLog文件 大小默认1G
7. 记录消息存储时间
8. 判断如果mappedFile如果为空或者已满,创建新的mappedFile文件
9. 如果创建失败,直接返回
10. 写入消息到mappedFile中
11. 获得文件的写入指针、如果指针大于文件大小则直接返回、通过writeBuffer.slice()创建一个与MappedFile共享的内存区,并设置position为当前 指针、通过回调方法写入
12. 刷盘、HA 同步
13. 索引使用的hash 索引