【RocketMq源码】六、消息的存储

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 索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值