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支持为同一个消息建立多个索引,多个索引键空格分开。

最新文章

  1. [转载]C#深入分析委托与事件
  2. Flash Professional 报错 TypeError: Error #1034: 强制转换类型失败:无法将 xxxx@zzzz 转换为 yyy
  3. RAC Concept
  4. 在编译php事务时候出现如下错误,具体原因不知,不过解决了
  5. SQL Server执行计划的理解【转】
  6. SO_REUSEADDR 和 SO_REUSEPORT
  7. Delphi For Android 开发笔记-附:如何Delphi中同时实现Windows、Android版的GetModuleFileName函数
  8. hdu 1429 胜利大逃亡(续) (bfs+状态压缩)
  9. JavaSE基础问答
  10. linux设备和驱动加载的先后顺序
  11. js中window对象的opener属性的一个坑
  12. 刚发现 CSS 还存在一个命名规范 B.E.M
  13. 当linux报 “-bash: fork: 无法分配内存”
  14. UISplitViewController使用
  15. Android 自定义类型文件与程序关联
  16. Sublime远程连接Linux
  17. ssh 将22端口换为其它 防火墙设置
  18. 16.Mysql SQL Mode
  19. nRF2401A/nRF24L01/nRF24L01+无线模块最常见问题汇集(转)
  20. 《Java 程序设计》课堂实践项目-简易计算器

热门文章

  1. Iperius Backup Full--小中企业简单自动备份的实用工具
  2. Java学习的第二十九天
  3. SQL 速查表
  4. Android 视频播放器 NurVideoPlayer ()
  5. Hive Join优化
  6. layui下拉框实现级联
  7. C++ 数据结构 4:排序
  8. Linux 网络栈 转载
  9. C++的四种强制转型形式:
  10. Java基础 之二 类和对象