01、RocketMQ 源码解析 - 调试环境搭建
版本
1、 基于rocketmq-all-4.3.1版本;
2、 规定$ROCKETMQ_SOURCE为源码根目录;
源码调试环境搭建
克隆代码到本地,使用idea打开,源码目录结构
broker:整个mq的核心,他能够接受producer和consumer的请求,并调用store层服务对消息进行处理。HA服务的基本单元,支持同步双写,异步双写等模式。
client::RocketMQ客户端实现
common:一些模块间通用的功能类,比如一些配置文件、常量。
distribution:发布脚本以及相关的配置文件
example:官方提供的例子
filter,过滤器,用于服务端 SQL92 的过滤方式
logappender:日志相关
namesrv:可以理解成注册中心,每个 broker 都会在这里注册,client 也会从这里获取 broker 的相关信息
remoting:基于netty的底层通信实现,所有服务间的交互都基于此模块。
srvutil:解析命令行的工具类。
store:存储层实现(负责消息的存储和读取),同时包括了索引服务,高可用HA服务实现。
tools:mq集群管理工具,提供了消息查询等功能。
启动NameServer
1、 查看$ROCKETMQ_SOURCE/distribution/bin/mqnamesrv.sh脚本可以看到如下命令,可以看出是委托${ROCKETMQ_HOME}/bin/runserver.sh这个脚本来启动org.apache.rocketmq.namesrv.NamesrvStartup这类的因为我们不是二进制安装包启动,所以如果我们要找到这个脚本,这里的${ROCKETMQ_HOME}必须设置为源码目录的$ROCKETMQ_SOURCE/distribution才可以;
...省略...
export ROCKETMQ_HOME
sh ${ROCKETMQ_HOME}/bin/runserver.sh org.apache.rocketmq.namesrv.NamesrvStartup $@
2、 查看$ROCKETMQ_SOURCE/distribution/runserver.sh文件,这个脚本主要是JVM的配置;
... 省略 ...
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
... 省略 ...
3、 idea配置NamesrvStartup类启动参数,NamesrvConfig需要通过$ROCKETMQ_HOME来读取conf目录的配置,所以这里的$ROCKETMQ_HOME设置为$ROCKET_SOURCE/distribution
;
本地启动Broker调试
1、 查看$ROCKETMQ_SOURCE/distribution/bin/mqbroker.sh可以看到如下命令,${ROCKETMQ_HOME}/bin/runbroker.sh这个脚本来启动org.apache.rocketmq.broker.BrokerStartup,与NameServer启动流程类似;
... 省略...
export ROCKETMQ_HOME
sh ${ROCKETMQ_HOME}/bin/runbroker.sh org.apache.rocketmq.broker.BrokerStartup $@
2、 查看$ROCKETMQ_SOURCE/distribution/runbroker.sh,此脚本主要也是JVM配置;
... 省略...
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
... 省略...
3、 idea配置BrokerStartup启动参数在Programarguments中指定broker的配置文件-cxxxx/distribution/conf/broker.conf(在图中没有标注出来);

远程调试
1、 这里以nameserver为例子在runserver.sh脚本中开启注释;
JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
2、 在idea中添加远程调试配置;
3、 打断点,然后启动debug模式,控制台显示如下表示成功;
