一、数据分发逻辑
消息消费队文件、消息属性索引文件都是基于CommitLog文件构建的,当消息生产者提交的消息存储在CommitLog文件中,ConsumerQueue、indexFile需要及时更新,否则消息无法及时被消费,根据消息属性查找消息也会出现较大延迟。RocketMQ通过开启一个线程ReputMessageservice来准实时转发Commitlog文件更新事件,相应的任务处理器根据转发的消息及时更新ConsumerQueue、indexFile文件。
那么ReputMessageservice这个线程是什么时候开启的呢?
DefaultMessageStore.class中持有ReputMessageservice这个对象,在DefaultMessageStore的start方法中会调用ReputMessageservice的start方法。
// 设置commitLog内存中最大偏移量
this.reputMessageService.setReputFromOffset(maxPhysicalPosInLogicQueue);
this.reputMessageService.start();
start方法如下:
@Override
public void run() {
DefaultMessageStore.log.info(