消息消费队列和索引文件的更新

自作多情 提交于 2020-01-27 00:29:42

ConsumeQueue,IndexFile需要及时更新,否则无法及时被消费,根据消息属性查找消息也会出现较大延迟。

mq通过开启一个线程ReputMessageService来准时转发commitLog文件更新事件,相应的任务处理器根据转发的消息及时更新ConsumeQueue,IndexFile文件

DefaultMessageStore#start

 

 

 

 

 

 

 

ReputMessageService线程每执行一次任务推送休息1毫秒旧继续尝试推送消息到消息消费队列和索引文件。

 

 

 

返回reputFromOffset偏移量开始的全部有效数据,然后循环读取每一条消息。

 

 

 

 

 

在DefaultMessageStore的构造方法中:

 

 

topic:消息主题名称

queueId:消息队列ID

commitLogOffset:消息物理偏移量

msgSize:消息长度

tagsCode:消息过滤tag hashcode

storeTimestamp:消息存储时间戳

consumeQueueOffset:消息队列偏移量

key:消息索引

success:是否成功解析道完整的消息

uniqKey:消息唯一键

sysFlag:消息系统标记

preparetransactionOffset:消息预处理事务偏移量

propertiesMap:消息属性

bitMap:位图

 

 

 

 

 

根据消息主题与队列ID,先获取对应的ConsumeQueue文件。

 

最后会调用这个方法,一次将消息偏移量,消息长度,tag hashcode写入到ByteBuffer中,并根据consumeQueueOffset计算ConumeQueue中的物理地址,将内容追加到ConsumeQueue的内存映射文件中,ConsumeQueue的刷盘方式固定为异步刷盘模式

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!