全网最详细的 RocketMQ 源码解读方案(上)赶紧收藏

消息中间件-RocketMQ(基础、实战、源码、原理看这一篇就够了) 消息中间件和消息队列是同一个概念的两种名称,是分布式系统中的一个重要组件。举个例子:比如现在有一个商城系统使用的是微服务架构,其中有订单服务、库存服务、物流服务、积分服务。业务场景是如果下单了一个商品需要调用库存服务减库存、需要调用物流服务发送商品、需要调用积分服务添加响应的积分。通过RPC框架(也就是http请求)通过消息中间件消息中间件就是生产者只需要将需要处理的消息丢进来即可不需要等到消息执行完成的回调,然后其他服务再去监听消息,有消息来了就执行消息消息中间件的应用场景异步解耦。 阅读详情

我们开始深入RocketMQ的源码。源码的解读是个非常困难的过程,每个人的理解程度都会不一样,也不太可能通过讲解把其中的细节全部讲明白。我们今天在解读源码时,采取逐层抽取的模式,希望能够给大家形成一个源码解读的大框架,帮助大家对源码形成自己的理解。

我们分为几条主线来解读源码:

源码环境搭建

1、源码拉取

RocketMQ的官方Git仓库地址:https://github.com/apache/rocketmq 可以用git把项目clone下来或者直接下载代码包。

也可以到RocketMQ的官方网站上下载指定版本的源码:http://rocketmq.apache.org/dowloading/releases/ 

下载后就可以解压导入到IDEA中进行解读了。我们只要注意下是下载的4.7.1版本就行了。

源码下很多的功能模块,很容易让人迷失方向,我们只关注下几个最为重要的模块:

  • broker: broker 模块(broke 启动进程)

  • client :消息客户端,包含消息生产者、消息消费者相关类

  • example: RocketMQ 例代码

  • namesrv:NameServer实现相关类(NameServer启动进程)

  • store:消息存储实现相关类

各个模块的功能大都从名字上就能看懂。我们可以在有需要的时候再进去看源码。

但是这些模块有些东西还是要关注的。例如docs文件夹下的文档,以及各个模块下都有非常丰富的junit测试代码,这些都是非常有用的。

2、注解版源码引入

RocketMQ的源码中有个非常让人头疼的事情,就是他的代码注释几乎没有。为了帮助大家解读源码,我给大家准备了一个添加了自己注释的源码版本。在配套资料当中。大家可以把这个版本导入IDEA来进行解读。

源码中对最为重要的注解设定了一个标记K1,相对不那么重要的注解设定了一个标记K2,而普通的注释就没有添加标记。大家可以在IDEA的TODO标签中配置这两个注解标记。                  

3、源码调试

将源码导入IDEA后,需要先对源码进行编译。

编译指令 clean install -Dmaven.test.skip=true     

 

编译完成后就可以开始调试代码了。调试时需要按照以下步骤:调试时,先在项目目录下创建一个conf目录,并从distribution拷贝broker.conf和logback_broker.xml和logback_namesrv.xml 

          

         

注解版源码中已经复制好了。

3.1 启动nameServer

展开namesrv模块,运行NamesrvStartup类即可启动NameServer

启动时,会报错,提示需要配置一个ROCKETMQ_HOME环境变量。这个环境变量我们可以在机器上配置,跟配置JAVA_HOME环境变量一样。也可以在IDEA的运行环境中配置。目录指向源码目录即可。   

       

                       

配置完成后,再次执行,看到以下日志内容,表示NameServer启动成功

The Name Server boot success. serializeType=JSON

3.2 启动Broker

启动Broker之前,我们需要先修改之前复制的broker.conf文件

 brokerClusterName = DefaultCluster
 brokerName = broker-a
 brokerId = 0
 deleteWhen = 04
 fileReservedTime = 48
 brokerRole = ASYNC_MASTER
 flushDiskType = ASYNC_FLUSH
 
 # 自动创建Topic
 autoCreateTopicEnable=true
 # nameServ地址
 namesrvAddr=127.0.0.1:9876
 # 存储路径
 storePathRootDir=E:\\RocketMQ\\data\\rocketmq\\dataDir
 # commitLog路径
 storePathCommitLog=E:\\RocketMQ\\data\\rocketmq\\dataDir\\commitlog
 # 消息队列存储路径
 storePathConsumeQueue=E:\\RocketMQ\\data\\rocketmq\\dataDir\\consumequeue
 # 消息索引存储路径
 storePathIndex=E:\\RocketMQ\\data\\rocketmq\\dataDir\\index
 # checkpoint文件路径
 storeCheckpoint=E:\\RocketMQ\\data\\rocketmq\\dataDir\\checkpoint
 # abort文件存储路径
 abortFile=E:\\RocketMQ\\data\\rocketmq\\dataDir\\abort

然后Broker的启动类是broker模块下的BrokerStartup。

启动Broker时,同样需要ROCETMQ_HOME环境变量,并且还需要配置一个-c 参数,指向broker.conf配置文件。       

然后重新启动,即可启动Broker。

3.3 发送消息

在源码的example模块下,提供了非常详细的测试代码。例如我们启动example模块下的org.apache.rocketmq.example.quickstart.Producer类即可发送消息。

但是在测试源码中,需要指定NameServer地址。这个NameServer地址有两种指定方式,一种是配置一个NAMESRV_ADDR的环境变量。另一种是在源码中指定。我们可以在源码中加一行代码指定NameServer

 producer.setNamesrvAddr("127.0.0.1:9876");

然后就可以发送消息了。

3.4 消费消息

我们可以使用同一模块下的org.apache.rocketmq.example.quickstart.Consumer类来消费消息。运行时同样需要指定NameServer地址

 consumer.setNamesrvAddr("192.168.232.128:9876");

这样整个调试环境就搭建好了。

3.5 如何看源码

下面我们可以一边调试一边讲解源码了。源码中大部分关键的地方都已经添加了注释,文档中就不做过多记录了。

我们在看源码的时候,要注意,不要一看源码就一行行代码都逐步看,更不要期望一遍就把代码给看明白。这样会陷入到代码的复杂细节中,瞬间打击到放弃。

看源码时,需要用层层深入的方法。每一次阅读源码时,先了解程序执行的流程性代码,略过服务实现的细节性代码,形成大概的概念框架。然后再回头按同样的方法,逐步深入到之前略过的代码。这样才能从源码中看出一点门道来。如果你对源码感兴趣的话,可以添加名片大家一起学习交流下,另外还准备了一份学习资料送给大家,备注“222”即可领取。

RocketMQ04-源码解读 文章目录一、源码环境搭建1、源码拉取:2、注解版源码引入3、源码调试:3.1 启动nameServer3.2 启动Broker3.3 发送消息3.4 消费消息3.5 如何看源码二、NameServer启动1、功能回顾2、启动流程3、源码重点三、Broker启动1、功能回顾2、源码重点四、Broker注册1、功能回顾2、源码重点五、Producer1、功能回顾2、源码重点六、消息存储1、功能回顾2、源码重点:七、消费者1、功能回顾2、源码重点:八、延迟消息1、功能回顾2、源码重点3 消费者部分小结:源码解读小 阅读详情

相关推荐

轻松解读RocketMQ5.3.0核心源码

同步刷盘,异步刷盘?同步同步,异步同步?零拷贝,顺序写?你是不是曾经在各种各样的流量短视频和博客中听说过跟RocketMQ相关的这些亮瞎眼的高大上的技术名词?你有没有想过自己去RocketMQ中看看这些概念背后的Java代码是什么样的?如果你有过这样的想法,那么,楼兰到你到RocketMQ的源码当中逛逛,看看RocketMQ的大神们,是如何用简单常见的MVC思想开发出RocketMQ这样的神作的。

roykingw的专栏 1549

RocketMQ源码分析

RocketMQ源码分析

lx9876lx的博客 8282

RocketMq源码解析一:源码结构介绍

从本章开始我们对Rocketmq的源码进行解析。使用版本是4.9.8。

money9sun的博客 598

全网最详细的 RocketMQ 源码解读方案(下)赶紧收藏

一、启动 DefaultMQPushConsumer.start方法 启动过程不用太过关注,有个概念就行,然后客户端启动的核心是 mQClientFactory 主要是启动了一大堆的服务。这些服务可以结合具体场景再进行深入。例如pullMessageService主要处理拉取消息服务,rebalanceService主要处理客户端的负载均衡。 二、消息拉取 拉模式:PullMessageService PullRequest里有messageQueue和processQueue,其中message

java_121388的博客 1224

Matlab处理气象数据(六)数据的面积加权

由于地理投影导致导致每个像元实际地面面积不同,越靠近北极实际面积越小,越靠近赤道实际面积越大,如果不进行面积加权就简单平均,会导致温度较实际温度偏低。 用以下公式计算地理投影每个像元的面积: double pi = 3.1415926; double R = 6371007.181; //units - m double area = (pi/180.0)*R*R*fabs(sin(dLat1/180.0*pi) - sin(dLat2/180.0*pi)) * fabs(dLon1 - dLo

设计の诗 1万+

【新手流程】1小时解决Anaconda+Cuda+Cudnn+Pytorch+Pycharm深度学习环境配置

一小时速通Anaconda+Cuda+Cudnn+Pytorch+Pycharm环境配置

m0_57190453的博客 4088

RocketMQ的下载与安装(全网最细保姆级别教学)

RocketMQ的下载与安装(全网最细保姆级别教学)

舒一笑的博客 2万+

unity shader 后处理实现水墨风格渲染「Low Poly 」变「水墨画 」

水墨风格渲染 这次学校的比赛打算做一个中国古代背景的游戏,所以尝试做了水墨风格的渲染。 主要按以下四步来实现的效果: 根据色调和饱和度调整饱和度。 对图像进行模糊 水墨风格的物体边缘 物体内画笔笔触的模拟 接下来我分别就这四步依次展开说明: 调整饱和度 这里我使用Post-Processing Stack 的Color Grading 来调节饱和度,通过使用Grading Curv...

九级铁甲蛹的博客 1万+

RocketMQ核心源码解读(一)

RocketMQ的通信是长连接双向的,使用REQUEST__COMMAND 和 RESPONSE_COMMAND来判断是什么类型的连接,客户端向服务端请求就是REQUEST__COMMAND,服务端接着会发送RESPONSE_COMMAND类型到客户端,客户端做回调(异步操作)可以在生产者示例中,start后打⼀个断点,然后把NameServer停掉,这时,Producer还是可以发送消息的。事务消息的Producer也需要响应Broker的事务状态回查,他也是需要NettyServer的。

weixin_58611042的博客 1437

网络变更:APIC 节点替换

Fabric Name,Controller ID,TEP Address Pool 等信息必须相同;如果故障设备是 APIC1 还需要重新配置管理密码。此过程可能需要 10 分钟左右,在此期间目标 APIC 可能在 Available/Unavailable 状态翻滚。APIC 获取 TEP 地址后,进入 fully-fit。通过 CLI 以及配置的密码登录目标 APIC。

m0_54931486的博客 322

【系统分析师】核心考点:100个高频知识点汇总

本文系统梳理了系统分析师考试的11大领域高频考点,重点解析了计算机硬件与体系结构的7个核心知识点:计算机五大部件(CPU/存储器/总线等)、校验码类型(奇偶/海明/CRC)、CISC与RISC指令系统对比、总线分类与特性、RAID磁盘阵列级别、流水线技术原理及Flynn系统分类法。内容涵盖硬件组成、数据校验、指令架构、存储技术等关键概念,通过表格对比和公式说明,为考生提供结构化的知识框架与备考重点。

数据知道的博客 5573

04-RocketMQ源码解读

04-RocketMQ源码解读

Joanna_or_zhouzhou的博客 892

锂电池的充电和放电曲线解读

锂电池充放电曲线是反映其性能的关键指标。充电曲线分为恒流和恒压两阶段:恒流阶段电压快速上升,恒压阶段电流逐渐降低;放电曲线则呈现平台期和快速衰减期特征。这些曲线受温度、充放电倍率及材料体系(如三元锂或磷酸铁锂)显著影响。通过分析曲线特征,可优化电池管理系统,实现精准的SOC估算、快充策略制定及故障诊断,从而在电池性能与安全性间取得平衡。不同应用场景(如新能源汽车或消费电子)对曲线形态有特定要求。

start_up_go的博客 5073

VIP04-RocketMQ源码解读

一、源码环境搭建1、源码拉取:2、注解版源码引入3、源码调试:3.1 启动nameServer3.2 启动Broker3.3 发送消息3.4 消费消息3.5 如何看源码二、NameServer启动1、功能回顾2、启动流程3、源码重点三、Broker启动1、功能回顾2、源码重点四、Broker注册1、功能回顾2、源码重点五、Producer1、功能回顾2、源码重点六、消息存储1、功能回顾2、源码重点:七、消费者1、功能回顾2、源码重点:八、延迟消息1、功能回顾2、源码重点3 消费者部分小结:源码解读小结 ​

liuhehe的博客 579

基于BQ25895RTWR的锂电池充电管理硬件设计

BQ25895 是一款适用于单节锂离子电池和锂聚合物电池的高度集成型 5A 开关模式电池充电管理和系统电源路径管理器件。此类器件支持高输入电压快速充电。低阻抗电源路径对开关模式运行效率进行了优化、缩短了电池充电时间并延长了放电阶段的电池使用寿命。• 移动电源、移动 Wi-Fi 热点。• 便携式互联网器件。

corlin6688的博客 1088

荣耀Magic 6 dToF LiDAR Android阵营全球第一首发

40X30分辨率的BSI SPAD小面阵,帧率达到60帧,搭配多传感器融合算法, 可产生足够的稠密点云,为应用设备提供可靠的距离传感。在手机消费电子方案中,dToF LiDAR技术不仅提升了手机的功能和用户体验,还为手机厂商提供了差异化的竞争优势。随着技术的不断进步和市场的快速发展,我们可以期待未来dToF LiDAR技术将在手机领域发挥更大的作用,为用户带来更多创新和便捷的功能。增强现实(AR)体验:通过dToF LiDAR提供的高精度深度信息,手机可以更准确地放置虚拟物体在现实世界的表面上。

致力于lidar应用开发 19万+

四:RocketMQ源码解读

目录 一、源码环境搭建 1、源码拉取: 2、注解版源码引入 3、源码调试: 3.1 启动nameServer 3.2 启动Broker 3.3 发送消息 3.4 消费消息 3.5 如何看源码 二、NameServer启动 1、功能回顾 2、启动流程 3、源码重点 三、Broker启动 1、功能回顾 2、源码重点 四、Broker注册 1、功能回顾 2、源码重点 五、Producer 1、功能回顾 2、源码重点 六、消息存储 1、功能回顾 2、源码重点:.

Xx__WangQi的博客 912

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

rocketmq源码解读-start

原因是需要在配置的ROCKETMQ_HOME变量对应的目录下创建conf/logback-namesrv.xml文件。解决方式:创建conf目录,然后在distribution模块中将logback-namesrv.xml拷贝过去即可。解决方式:创建conf目录,然后在distribution模块中将logback-broker.xml拷贝过去即可。这里就不进行过多讲述了,,感兴趣的可以看看,,后面将会出关于源码运行原理的笔记。原因是需要配置环境变量,变量值可为rocketmq源码的目录地址。

u012690015的博客 880

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

全网最细RocketMQ源码二:Producer

ClientConfig是客户端配置类,继承ClientConfig说白了就是共享一些通用的客户端配置属性和功能。客户端统一rpc:MQClientAPIImpl mQClientAPIImpl,使用他来发送消息的。在sendMessage的过程中一直用到这个类,我们来讲讲这个类是做什么用。创建了requestHeader,带了很多发送message的元数据。客户端与server通信的实现,通过名字就能看得出来。这个就是我们业务层经常使用的对象,用来发送消息。选的时候,用的算法就是一个自增值%队列数目。

一只小星星 1294

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

RocketMQ学习第一步之源码构建

这里写目录标题绪论源码构建1.clone2. 构建3.配置3.1配置namesrv3.2新建文件夹3.3 配置broker3.4 配置producer3.5 配置 consumer4.启动 绪论 最近溪源在学习dubbo的相关API机制实践,如:负载均衡、服务分组、本地存根等等…一方面是dubbo官网文档给出了详细的介绍和demo,另一方面由于自己时间方面原因(自己现在也需要学习各种技术栈),没有整理相关实践总结。但是后面一定会整理出相关的实践总结。 今天主要给大家介绍一下rocketmq源码本地化构建,也

增量星球 9082

【RocketMQ】第4节|RocketMQ核心源码解读

Producer负载均衡:轮询MessageQueue,支持故障规避和自定义选择器。Consumer负载均衡:集群模式下通过多种算法分配MessageQueue,广播模式下所有消费者获取所有队列。

泽韦德的专栏 669

RocketMQ源码(1)—RocketMQ源码调试环境准备

详细介绍了RocketMQ 4.9.3 分支的源码调试环境搭建等一系列准备工作。

终生学习践行者 3447
上一篇: 一场由Char/Varchar 引起的战争
下一篇: 全网最详细的 RocketMQ 源码解读方案(下)赶紧收藏
架构文摘JGWZ
博客等级 码龄5年 8808粉丝 345原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值