rocketmq源码分析
文章平均质量分 78
rocketmq源码分析
岁月人
极客精神,热衷源码探索,持续学习
跟随云原生脚步,探索深度学习方向
展开
-
rocketmq源码分析一消息格式
commitlogcommitlog由多个文件构成每个文件由一条条变长消息构成文件尾一般存在部分空白填充原创 2022-02-10 16:37:47 · 435 阅读 · 0 评论 -
rocketmq核心源码分析第二十七篇一重试消息以及死信消息
文章目录原理图总结原理图重试消息以及死信消息的主题均以消费者组名定义每一个消费者组一个死信消息topic每一个消费者组一个重试消息topic重试消息最大消费16次,延迟级别从3开始到18结束当消息重试至最大次数则终止重试发送至死信队列可以建立一个专门消费组订阅死信队列总结消费者模块详解了不同模型下消费失败的处理代码基本重复于[消费模块,延时消息模块],本文简述重试以及死信消息流程...原创 2022-02-11 21:28:51 · 800 阅读 · 0 评论 -
rocketmq核心源码分析第二十六篇一事务消息一broker端处理
消息处理原理图消息回查原创 2022-02-11 20:00:59 · 899 阅读 · 0 评论 -
rocketmq核心源码分析第二十五篇一事务消息一生产者发送
文章目录原理图序言一TransactionListener原理图发送half消息执行本地事务提交或回滚服务端主动检查事务状态由服务端主动检查触发的提交或回滚序言一TransactionListenerpublic interface TransactionListener { 当发送事务half消息成功时,将调用该方法执行本地事务 LocalTransactionState executeLocalTransaction(final Message msg,原创 2022-02-10 16:04:31 · 405 阅读 · 0 评论 -
rocketmq核心源码分析第二十四篇一延时消息
rocketmq采用了固定级别延时消息实现不同于时间轮算法 其延时是固定18个级别的离散性实现,无法做到任意级别连续延迟文章目录原理图源码分析一ScheduleMessageService源码分析一DeliverDelayedMessageTimerTask总结扩展点一topic转换原理图延迟级别messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2hmsg.setDelayTimeLe.原创 2022-02-10 15:12:12 · 626 阅读 · 0 评论 -
rocketmq核心源码分析第二十三篇一顺序消息
文章目录顺序消息使用demo源码分析总结顺序消息使用demo通过MessageQueueSelector对mqs进行选择一般按业务维度保障分区顺序defaultMQProducer.send(msg,new MessageQueueSelector(){ public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) { 通常用法: msg的业务唯一键相同的消息发送到同一队列原创 2022-02-08 15:57:58 · 425 阅读 · 0 评论 -
rocketmq核心源码分析第二十二篇一AllocateMessageQueueStrategy策略
文章目录AllocateMachineRoomNearby一就近机房源码分析AllocateMessageQueueByMachineRoom一指定机房源码分析AllocateMessageQueueByConfig一配置化源码分析AllocateMessageQueueConsistentHash一一致性hash源码分析AllocateMessageQueueAveragely一平均分配源码分析AllocateMessageQueueAveragelyByCircle一环形平均源码分析总结Allocat原创 2022-02-08 00:57:24 · 1412 阅读 · 1 评论 -
rocketmq核心源码分析第二十一篇一offsetStore进度管理以及消费起始位点详解
文章目录OffsetStore接口签名消费进度管理一更新进度updateOffset消费进度管理一读取进度readOffset消费进度管理一持久化进度persistAllpersist总结消费进度管理:广播模式和集群模式集群模式: broker端存储广播模式: 消费者本地存储注: 本文针对集群模式OffsetStore接口签名public interface OffsetStore { 读取指定消息队列的消费进度 long readOffset(final MessageQueue原创 2022-02-05 00:01:03 · 959 阅读 · 0 评论 -
rocketmq核心源码分析第二十篇一消息消费五步曲一消费失败并发重试与顺序阻塞
文章目录并发消费一失败重试顺序消费一失败阻塞总结并发消费一失败重试不管消费成功与否 都会更新消费进度 【对于broker来说 没有失败 消息都会消费成功,其实就是修改消费偏移量,consume端消费失败的会在重试主题创建新的消息】计算ackIndex根据ack index 来决定是否发送到重试队列 %RETRY%+consumeGroup消费失败需要重发消息如果发送到重试队列失败 则需要兜底重新消费[重试次数也增加]移除ProcessQueue中处理过的消息public void p原创 2022-02-04 23:45:58 · 747 阅读 · 0 评论 -
rocketmq核心源码分析第十九篇一消息消费五步曲一消息消费
这里写目录标题序言:PullCallbackConsumeMessageOrderlyService一顺序消费ConsumeMessageConcurrentlyService一并发消费序言:PullCallbackbroker 响应mqclient,执行pullCallback回调触发消息存储消费缓冲区processQueue触发消费进程消费消息PullCallback pullCallback = new PullCallback() { @Override public原创 2022-02-04 00:05:03 · 1703 阅读 · 0 评论 -
rocketmq核心源码分析第十八篇一消息消费五部曲一服务端消息拉取及MessageArrivingListener-PullRequestHoldService消息挂起
文章目录原理图PullMessageProcessor处理消息拉取请求二级目录三级目录原理图PullMessageProcessor处理消息拉取请求二级目录三级目录原创 2022-02-02 22:22:46 · 927 阅读 · 0 评论 -
rocketmq核心源码分析第十七篇一消息消费五部曲一消息拉取
文章目录原理图第一部分一构建pullrequest第一部分一pullrequest拉取原理图由再平衡线程构建pullrequest加入拉取线程的pullRequestQueue拉取线程不断获取pullRequest后调用对应的MQConsumerInner进行消息拉取拉取结果加入ProcessQueue, 并循环拉取第一部分一构建pullrequestRebalance等组件构建并调用executePullRequestImmediately将pullRequest加入pullRequ原创 2022-02-02 21:17:16 · 925 阅读 · 0 评论 -
rocketmq核心源码分析第十六篇一消息消费五部曲一消息平衡
文章目录组件图流程图源码分析一RebalanceService源码分析MQClientInstance.doRebalanceDefaultMQPushConsumerImpl.doRebalanceRebalanceImpl.doRebalanceRebalanceImpl.rebalanceByTopic一核心代码findConsumerIdListallocateMessageQueueStrategy原理updateProcessQueueTableInRebalance变更核心数据总结组件图原创 2022-02-02 21:05:33 · 598 阅读 · 0 评论 -
rocketmq核心源码分析第十五篇一消息消费五步曲一前言
概述消费源码分析以push模式以及集群消费概述pull消费以及广播模式不在叙述章节核心功能消息平衡消息拉取消息拉取服务端 MessageArrivingListener以及长轮询消息消费消息重试整体流程图涉及消息发送,存储以及消费整体消息到达以及suspend延迟机制[长短轮询]消息append进内存后并进行刷盘,之后reputMessageService进行消费队列构建构建消费队列完成会触发MessageArrivingListe原创 2022-02-02 20:06:40 · 484 阅读 · 0 评论 -
rocketmq核心源码分析第十四篇一消息处理第八部分一commitlog以及consumequeue数据格式
文章目录源码分析一AppendMessageCallback.doAppendcommitlog消息体格式commitlog_consumequeue一图解![在这里插入图片描述](https://img-blog.csdnimg.cn/e315675e459e4566a4162f064b5a5a6c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bKB5pyI5Lq6,size_20,color_原创 2022-02-02 15:57:04 · 1098 阅读 · 0 评论 -
rocketmq核心源码分析第十三篇一消息处理第七部分一磁盘文件目录及磁盘文件删除
文章目录磁盘文件文件删除DefaultMessageStore.addScheduleTaskcleanCommitLogServicecleanConsumeQueueService总结磁盘文件abort 判断进程是否正常启停checkpoint 检查点用于文件恢复commitlog存储所有topic消息config 消费进度,filter等存储位置consumequeue 消费者根据consumequeue拉取commitlog进行消息消费consumequeue 下为不同的topic,原创 2022-01-31 02:00:35 · 981 阅读 · 0 评论 -
rocketmq核心源码分析第十二篇一消息处理第六部分一broker端刷盘机制[同步,异步]
这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录原创 2022-01-30 15:34:58 · 1068 阅读 · 0 评论 -
原创 rocketmq核心源码分析第十一篇一消息处理第五部分一broker端获取添加消息的mappedFile
文章目录获取映射文件原理图源码分析一创建新文件源码分析一getLastMappedFile源码分析一putRequestAndReturnMappedFile源码分析一AllocateMappedFileService.run源码分析一mmapOperation源码分析一warmMappedFilemlock总结获取映射文件原理图当前文件已经写满或者空间小于当前消息长度,则需要新建commitlog[1G]需要通过allocateMappedFileService创建文件每次构建两个请求[创建两个原创 2022-01-30 14:30:40 · 1508 阅读 · 0 评论 -
rocketmq核心源码分析第十篇一消息处理第四部分一broker端添加消息到缓存以及构建consumequeue与index文件
文章目录消息存储一asyncPutMessagecommitLog.asyncPutMessage消息存储一asyncPutMessagecommitLog完成消息存储storeStatsService完成消息架构升级public CompletableFuture<PutMessageResult> asyncPutMessage(MessageExtBrokerInner msg) { 储存检查 PutMessageStatus checkStoreStatus原创 2022-01-30 00:59:32 · 2534 阅读 · 0 评论 -
rocketmq核心源码分析第九篇一消息处理第三部分一broker通信层接收消息
文章目录消息处理模型启动阶段: 消息处理类运行阶段: 请求响应映射源码分析一SendMessageProcessor.asyncProcessRequest源码分析一SendMessageProcessor.asyncSendMessage源码分析一handleRetryAndDLQ总结消息处理模型启动阶段: 消息处理类发送消息 和发送批量消息都交由SendMessageProcessor处理运行阶段: 请求响应映射同一个通道可能会发送多个消息,请求与响应一一对应通过 opaque完成r原创 2022-01-30 00:44:22 · 1109 阅读 · 0 评论 -
rocketmq核心源码分析第八篇一消息处理第二部分一sendLatencyFaultEnable和监听nameserver变更
文章目录sendLatencyFaultEnablenameserver变更监听总结sendLatencyFaultEnablenameserver变更监听总结原创 2022-01-29 00:34:01 · 1730 阅读 · 0 评论 -
rocketmq核心源码分析第七篇一消息处理第一部分一消息发送
文章目录图示源码分析核心特性总结扩展点一图示源码分析核心特性总结扩展点一原创 2022-01-28 01:39:36 · 765 阅读 · 0 评论 -
rocketmq核心源码分析第六篇一消费者启动
文章目录前言消费者模块图轻量级pull消费者来源DefaultMQPullConsumer使用方式DefaultLitePullConsumer使用方式DefaultMQPushConsumer使用方式三种模式对比正文DefaultMQPushConsumer.start消费者启动前言消费者模块图pull和push模式消费者轻量级pull轻量级pull消费者来源issue提问: 由于当前 DefaultMQPullConsumer 过于原子化,用户在使用 pullConsumer 时需原创 2022-01-27 02:12:57 · 1516 阅读 · 1 评论 -
rocketmq核心源码分析第五篇一生产者启动
文章目录源码分析一new DefaultMQProducer源码分析一start总结DefaultMQProducer producer = new DefaultMQProducer(“group_name”);producer.start();通过以上代码完成生产者创建及启动源码分析一new DefaultMQProducer源码分析一start总结一个进程含有生产者和消费者n个,但只含有一个mqClient通信socketchannel,并且生产者和消费者共享...原创 2022-01-26 01:05:49 · 1293 阅读 · 0 评论 -
rocketmq核心源码分析第四篇一Broker启动分析一第二小节图解broker启动及文件正常异常恢复
文章目录broker启动图示文件恢复DefaultMessageStore.recover源码分析recoverNormally正常恢复recoverAbnormally异常恢复总结扩展点一commitlog和consumequeue文件概述broker启动图示实际上broker启动非常复杂我们简化来看主要分两部分:加载和start加载阶段完成各个组件的初始化,其中最重要的是DefaultMessageStore组件start 阶段完成通信监听,注册nameserver调度等等De原创 2022-01-26 00:50:22 · 1083 阅读 · 0 评论 -
rocketmq核心源码分析第三篇一Broker启动分析
这里写目录标题引言broker内部处理模型发送消息模型broker启动源码分析创建BrokerControllernew BrokerController分析controller.initialize分析消息Processor与线程池绑定startbrokerController总结扩展点一DefaultMessageStore实例化扩展点一DefaultMessageStore.load引言1 broker 端启动的核心功能 启动消息存储核心引擎[DefaultMessageStore]Defau原创 2022-01-25 01:00:21 · 1392 阅读 · 0 评论 -
rocketmq核心源码分析第二篇一Nameserver模块源码分析
文章目录namesrv原理图源码分析一NamesrvStartup启动nameservercreateNamesrvController创建nameserverstart启动nameservercontroller.initializenamesrvController.start总结扩展点一DefaultRequestProcessor扩展点一scanNotActiveBrokernamesrv原理图名称内容HashMap<String/* topic */, List<原创 2022-01-24 21:05:07 · 1354 阅读 · 0 评论 -
rocketmq模块架构图
很多的源码分析总是流程化的解读,授道者也喜欢跟随方法的方式却授予深入思考其实像乐高一样积木化,组件化的东西才更容易理解;特此整理rocketmq组件模块其中浅黄色为每个组件的容器,承载mq的一些核心元信息broker相关还没有化[太晚了,哈哈]...原创 2021-11-26 01:22:48 · 1812 阅读 · 0 评论