【mq读书笔记】消息消费队列和索引文件的更新
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支持为同一个消息建立多个索引,多个索引键空格分开。
【mq读书笔记】消息消费队列和索引文件的更新的更多相关文章
- 【mq读书笔记】消费进度管理
从前2节可以看到,一次消费后消息会从ProcessQueue处理队列中移除该批消息,返回ProcessQueue最小偏移量,并存入消息进度表中.那消息进度文件存储在哪合适呢? 广播模式:同一个消费组的 ...
- 【mq读书笔记】消息队列负载与重新分配(分配 新队列pullRequest入队)
回顾PullMessageService#run: 如果队列总没有PullRequest对象,线程将阻塞. 围绕PullRequest有2个问题: 1.PullRequest对象在什么时候创建并加入p ...
- 【mq读书笔记】如何保证三个消息文件的最终一致性。
考虑转发任务未成功执行,此时消息服务器Broker宕机,导致commitlog,consumeQueue,IndexFile文件数据不一致. commitlog,consumeQueue遍历每一条消息 ...
- 【mq读书笔记】mq事务消息
关于mq食物以什么样的方式解决了什么样的问题可以参考这里: https://www.jianshu.com/p/cc5c10221aa1 上文中示例基于mq版本较低较新的版本中TransactionL ...
- 【mq读书笔记】顺序消息
注意异常情况导致整个消费无限重试 阻塞消费 mq支持局部消息顺序消费,可以确保同一个消息消费队列中的消息被顺序消费.看下针对顺序消息在整个消费过程中做的调整: 队列负载: DefaultMQPushC ...
- 【mq读书笔记】定时消息
mq不支持任意的时间京都,如果要支持,不可避免的需要在Broker层做消息排序,加上持久化方面的考量,将不可避免地带来巨大的性能消耗,所以rocketMQ只支持特定级别的延迟消息. 在Broker短通 ...
- 【mq读书笔记】消息拉取长轮训机制(Broker端)
RocketMQ并没有真正实现推模式,而是消费者主动想消息服务器拉取消息,推模式是循环向消息服务端发送消息拉取请求. 如果消息消费者向RocketMQ发送消息拉取时,消息未到达消费队列: 如果不启用长 ...
- 【mq读书笔记】消息拉取
疑问:PullRequest何时添加? PullMessageService提供延迟添加与立即添加2种方式 疑问:PullRequest是在什么时候创建的呢? 1.上上图中 PullRequest p ...
- 【mq读书笔记】mq消息存储
comitlog文件 ConsumerQueue文件 IndexFile文件 RocketMQ将所有主题的消息存储在同一个文件中,确保消息发送时顺序写文件. 为了提高消息消费的效率RocketMQ引入 ...
随机推荐
- Spring笔记(6) - Spring的BeanFactoryPostProcessor探究
一.背景 在说BeanFactoryPostProcessor之前,先来说下BeanPostProcessor,在前文Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析中讲解了Be ...
- Struts2 S2-059 (CVE-2019-0230 )复现 及流量分析、特征提取
一.简介 2020年08月13日,Apache官方发布了Struts2远程代码执行漏洞的风险通告,该漏洞编号为CVE-2019-0230,漏洞等级:高危,漏洞评分:8.5 二.漏洞描述 Struts2 ...
- 通过一个很常用的场景来展示vue数据驱动的应用
需求:可以动态增减组合条件来进行数据查询. 界面运行效果如下图所示: 界面第一次加载时,默认会显示一个空的查询条件,如下图所示: 点击"加"图标,可以无限增加查询条件,也可以点击& ...
- [Luogu P3119] [USACO15JAN]草鉴定Grass Cownoisseur (缩点+图上DP)
题面 传送门:https://www.luogu.org/problemnew/show/P3119 Solution 这题显然要先把缩点做了. 然后我们就可以考虑如何处理走反向边的问题. 像我这样的 ...
- Python3网络学习案例四:编写Web Proxy
代理服务器的定义和作用请走百度百科~ 1. Web Proxy的实现思路 这是基于上一篇"编写Web Server"写的,主要逻辑见下图: 我们要写的就是中间的Web Proxy部 ...
- 分库分表的 9种分布式主键ID 生成方案,挺全乎的
<sharding-jdbc 分库分表的 4种分片策略> 中我们介绍了 sharding-jdbc 4种分片策略的使用场景,可以满足基础的分片功能开发,这篇我们来看看分库分表后,应该如何为 ...
- VSCode--HTML代码片段(基础版,react、vue、jquery)
起因是最近在学习前端,看的网上的demo也是在react.vue.jquery之间穿插,为了方便一键生成html模板(懒)写demo,有了以下折腾. 本人使用的前端编辑工具是vscode(方便.懒), ...
- 查看并配置JAVA_HOME
转载自https://blog.csdn.net/weixin_41713592/article/details/79941418which java [root@host2 hadoop-1.1.2 ...
- leetcode132:4sum
题目描述 给出一个有n个元素的数组S,S中是否有元素a,b,c和d满足a+b+c+d=目标值?找出数组S中所有满足条件的四元组. 注意: 四元组(a.b.c.d)中的元素必须按非降序排列.(即a≤b≤ ...
- Vue2.0源码分析
Vue其实是用Function写的一个class: 1.通过一系列的函数给Vue.prototype上动态挂载方法和属性 2.通过initGlobalAPI(Vue)给Vue本身扩展全局API 数据驱 ...