手把手教你使用Idea调试RocketMQ源码

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 手把手教你使用Idea调试RocketMQ源码

前言

为了更好地了解RocketMQ,我打算看一看它的源码了。随着RocketMQ5.0版本的发布,应该有更多小伙伴在实际应用中选择RocketMQ。那么我们就从这一篇文章开始,逐步来了解RocketMQ的神秘源码吧!接下来我们先把调试环境搭建好。

下载源码

  • 源码地址:github.com/apache/rock…
    我们先把RocketMQ源码下载下来,为了方便一点,建议小伙伴先fork到自己的仓库,然后再通过git拉下来。
  • 导入idea
    我们通过idea把下载的源码导入:

image.png

  • 有任何报红或者错误先不用管。
  • 代码编译
    不要直接打开namesrv找到main函数就运行,这样是跑不起来的,会产生以下错误:

image.png


  • 我们找到源码所在的本地目录,或者直接在项目中打开Terminal:

image.png

  • 首先执行java -version检查安装的java版本,建议该版本不能超过java 11,测试下来java 17是编译不了的。

如果版本没问题的话,执行mvn clean install -DskipTests编译该项目。

编译成功后,结果如下:

image.png

运行namesrv

  • 设置ROCKETMQ_HOME
    在启动namesrv之前,我们要先设置以下对应的环境变量ROCKETMQ_HOME,这个变量可以直接在启动配置里面设置。namesrv在启动的时候就会去ROCKETMQ_HOME/conf里面去找相应的配置,比如logback_namesrv.xml

image.png

  • 添加logback_namesrv.xml
    我们拉下来的项目中已经有现成的logback_namesrv.xml,所以我们只需要拷贝一下。从distribution/conf里面就可以找到logback_namesrv.xml,直接拷贝到我们指定的ROCKETMQ_HOME/conf路径中。
  • 启动
    直接在idea中点击run或者debug启动namesrv服务。

image.png

启动broker

  • 设置环境变量ROCKETMQ_HOME和配置文件
    同样的我们需要设置环境变量ROCKETMQ_HOME,目的和namesrv一样,是为了读取日志配置文件;另一个-c xx/xx/broker.conf是为了指定服务的配置文件。

image.png

  • 配置文件
    我们的broker启动需要两个配置文件,一个是日志配置文件logback_broker.xml,一个是broker.conf配置。这两个配置文件我们都可以从项目中的distribution/conf中找到,我们把找到的两个文件放到指定的路径下。broker.conf文件需要做一些简单的修改:
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# namesrv服务地址
namesrvAddr = 127.0.0.1:9876
# 运行自动创建topic,避免调试的时候麻烦
autoCreateTopicEnable = true
# 数据存储路径
storePathRootDir = /Users/zouwei/Documents/projects/github_project/rocketmq/data_store
# commitlog存储文件
storePathCommitLog = /Users/zouwei/Documents/projects/github_project/rocketmq/data_store/commitlog
# 消费队列存储文件
storePathConsumeQueue = /Users/zouwei/Documents/projects/github_project/rocketmq/data_store/consumequeue
# 索引存储文件
storePathIndex = /Users/zouwei/Documents/projects/github_project/rocketmq/data_store/index
# checkpoint存储文件
storeCheckpoint = /Users/zouwei/Documents/projects/github_project/rocketmq/data_store/checkpoint
# abort文件
abortFile = /Users/zouwei/Documents/projects/github_project/rocketmq/data_store/abort
复制代码
  • 小伙伴们需要根据自己的实际情况来修改上述配置。
  • 启动broker
    接下里,我们就可以通过idea来启动broker了,点击run或者debug按钮,最后broker启动成功。
    为了更好地看到启动效果和相关配置,小伙伴们可以适当修改一下logback_broker.xml
<logger name="RocketmqBroker" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="RocketmqBrokerAppender"/>
    </logger>
复制代码
  • RocketmqBroker里面加上<appender-ref ref="STDOUT"/>,这样我们就可以在控制台中看到相关的日志了。

image.png

小结

至此,我们就完成了通过idea把RocketMQ项目导入并运行起来的操作,里面确实有一些比较小的坑,大概总结一下:

1.代码拉下来后不能直接运行,需要通过mvn clean install -DskipTests编译后才能运行,否则报错;

2.在编译前需要检查java版本,不能是过高的版本,比如java 17;

3.编译完成后,需要在启动配置中指定相关的环境变量ROCKETMQ_HOME,该变量是为了namesrvbroker服务找到日志配置文件;broker服务还要指定broker.conf配置文件;

4.broker服务最好配置一下autoCreateTopicEnable = true,避免后续调试的时候不方便;

5.所有的配置文件在拉下来的代码中都可以找到,相关路径为distribution/conf

6.把日志输出到控制台可以更好地了解服务启动的状态;


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1月前
|
消息中间件 存储 监控
深度写作:深入源码理解MQ长轮询优化机制
【11月更文挑战第22天】在分布式系统中,消息队列(Message Queue, MQ)扮演着至关重要的角色。MQ不仅实现了应用间的解耦,还提供了异步消息处理、流量削峰等功能。而在MQ的众多特性中,长轮询(Long Polling)机制因其能有效提升消息处理的实时性和效率,备受关注。
67 12
|
1月前
|
消息中间件 存储 Java
深入源码理解MQ长轮询优化机制
【11月更文挑战第22天】在分布式系统中,消息队列(MQ)作为一种重要的中间件,广泛应用于解耦、异步处理、流量削峰等场景。其中,延时消息和定时消息作为MQ的高级功能,能够进一步满足复杂的业务需求。为了实现这些功能,MQ系统需要进行一系列优化,长轮询机制便是其中的关键一环。本文将深入探讨MQ如何设计延时消息和定时消息的优化机制,特别是长轮询机制的实现原理及其在Java中的模拟实现。
37 2
|
1月前
|
数据库 开发者
IntelliJ IDEA调试技巧:提升你的调试效率
调试是软件开发中不可或缺的一部分,而IntelliJ IDEA提供了一套强大的调试工具,可以帮助开发者更高效地定位和解决问题。本文将分享一些高手必会的IDEA调试技巧,让你在调试时如虎添翼。
39 0
|
1月前
|
IDE Java 开发工具
IntelliJ IDEA高效调试技巧:提升你的调试效率
在Java开发中,调试是开发过程中不可或缺的一部分。IntelliJ IDEA作为一款强大的IDE,提供了丰富的调试功能,帮助开发者更高效地定位和解决问题。本文将分享一些高手必会的IDEA调试技巧,让你的调试工作事半功倍。
52 0
|
7月前
|
SQL 存储 数据处理
实时计算 Flink版产品使用合集之idea本地调试,在哪里查看执行结果
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
消息中间件 数据可视化 Go
Rabbitmq 搭建使用案例 [附源码]
Rabbitmq 搭建使用案例 [附源码]
53 0
|
2月前
|
传感器 数据可视化 网络协议
DIY可视化整合MQTT生成UniApp源码
DIY可视化整合MQTT生成UniApp源码
53 0
|
4月前
|
Web App开发 JavaScript 前端开发
IDEA——使用JavaScript Debugger调试代码
IDEA——使用JavaScript Debugger调试代码
36 0
|
6月前
IDEA之Stream表达式生成、调试
IDEA之Stream表达式生成、调试
190 1
|
6月前
|
Java 应用服务中间件 数据库
SSM使用IDEA整合视频及源码配置文件
SSM使用IDEA整合视频及源码配置文件