RocketMq源码解析-CommitLog

CommitLog.asyncPutMessages:
    1.记录消息存储到broker的时间
    2.存储耗时相关信息,收集这些指标,上报给监控系统
    3.处理延时消息(定时消息)
    4.加锁 putMessage会有多个线程并行处理,需要上锁,可以再broker中配置是重入锁还是自旋锁userRetreenLockWhenputmessage,默认是false使用自旋锁,异步刷盘建议使用自旋锁,同步刷盘建议使用重入锁
    5.获取最近一个commitLog文件的内容映射文件(零拷贝)
    注意:这里不同版本4.5两个顺序可能有差异,有先读文件后加锁的,有先加锁后读的,推荐先加锁后读。
    6.result = mappedFile.appendMessage(msg, this.appendMessageCallback, putMessageContext);把broker内部的message刷新到mappedFile缓存(这个时候还没有刷盘)
    7.写入到当前位置
    在commitlog的构造方法中就启动了独立的线程
    同步刷盘:GroupCommitService
    异步刷盘:CommitRealTimeService(用于将bytebuffer新追加的内容提交到mappedbytebuffer)即存储到堆外内存/FlushCommitLogService(将mappedbytebuffer中追加的内存写入到磁盘)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值