码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-01-27 09:16:46      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:映射文件   code   sage   技术   hash   消费   timestamp   map   名称   

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的刷盘方式固定为异步刷盘模式

 

 

技术图片

 

如果messageIndexEnable设置为true。

技术图片

 

获取或创建IndexFile文件并获取所有文件最大的物理偏移量。如果该消息的物理偏移量小于索引文件中的物理偏移量,则说明是重复数据,忽略本次索引构建。

 

技术图片

 

如果消息的唯一键不为空,则添加到Hash索引中,以便加速根据唯一键检索消息

 

 

技术图片

 

构建索引键,mq支持为同一个消息建立多个索引,多个索引键空格分开。

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

标签:映射文件   code   sage   技术   hash   消费   timestamp   map   名称   

原文地址:https://www.cnblogs.com/lccsblog/p/12235294.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!