俩佑

V1

2022/05/11阅读:16主题:默认主题

如何调试 RocketMQ 源码

基于 RocketMQ 4.9.3 版本搭建

Linux 运行

步骤一:通过 wget 命令下载 rocketmq-all-4.9.3 压缩包

wget https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.9.3/rocketmq-all-4.9.3-bin-release.zip

步骤二:通过 unzip 命令解压 rocketmq-all-4.9.3-bin-release.zip

unzip rocketmq-all-4.9.3-bin-release.zip

步骤三:解压后的文件夹名为 rocketmq-4.9.3 ,cd 进入 rocketmq-4.9.3 文件夹中

cd rocketmq-4.9.3

rocketmq-4.9.3 的目录层级为:

├── benchmark 基准测试 ├── bin 启动脚本
├── conf RocketMQ配置 ├── lib 依赖的jar ├── LICENSE ├── NOTICE └── README.md

步骤四:修改 bin 目录下的启动脚本的 JVM 参数,默认设置的比较大。如果是个人学习机器内存不一定够用,建议修改小一点,内存足够可忽略。

  • 修改 runserver.sh

    cd bin
    vi runserver.sh

    # 找到如下代码

    JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=1 28m -XX:MaxMetaspaceSize=320m"

    # 修改 "-Xms -Xmx -Xmn" 参数

    -Xms512M -Xmx512M -Xmn256M

    # :wq 保存并退出
  • 修改 runbroker.sh

    cd bin
    vi runbroker.sh

    # 找到如下代码
    JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g"

    # 修改为
    JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m"

    # :wq 保存并退出

步骤五:启动 nameserver 和 broker

启动 nameserver

# 执行启动命令
cd bin
nohup ./mqnamesrv &

tail -f ${user_home}/logs/rocketmqlogs/namesrv.log

# 查看到如下日志 说明启动成功

2022-03-08 18:56:33 INFO main - Using JDK SSL provider
2022-03-08 18:56:34 INFO main - SSLContext created for server
2022-03-08 18:56:34 INFO main - Try to start service thread:FileWatchService started:false lastThread:null
2022-03-08 18:56:34 INFO NettyEventExecutor - NettyEventExecutor service started
2022-03-08 18:56:34 INFO main - The Name Server boot success. serializeType=JSON
2022-03-08 18:56:34 INFO FileWatchService - FileWatchService service started

启动 broker

修改 broker.conf 配置如下:

# 命令
cd conf
vi broker.conf

# 配置
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
namesrvAddr=公网ip:9876
brokerIP1=公网ip
autoCreateTopicEnable=false

执行启动命令:


cd bin
nohup ./mqbroker -c ../conf/broker.conf &

tail -f ${user_home}/logs/rocketmqlogs/broker.log

# 查看到如下日志 说明启动成功
2022-03-08 19:13:12 INFO FileWatchService - FileWatchService service started
2022-03-08 19:13:12 INFO PullRequestHoldService - PullRequestHoldService service started
2022-03-08 19:13:12 INFO main - Try to start service thread:TransactionalMessageCheckService started:false lastThread:null
2022-03-08 19:13:12 INFO brokerOutApi_thread_1 - register broker[0]to name server 127.0.0.1:9876 OK
2022-03-08 19:13:12 INFO main - The broker[VM-16-10-centos, 10.0.16.10:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876

步骤六:通过 tool.sh 执行 Producer 、Consumer

先将 NAMESRV_ADDR 将入到环境变量

export NAMESRV_ADDR=localhost:9876

执行 ./tools.sh org.apache.rocketmq.example.quickstart.Producer 命令发送 1000 条消息

https://tva1.sinaimg.cn/large/e6c9d24ely1h02phog1jhj22gw0a6gnf.jpg
https://tva1.sinaimg.cn/large/e6c9d24ely1h02phog1jhj22gw0a6gnf.jpg

执行 ./tools.sh org.apache.rocketmq.example.quickstart.Consumer 命令消费 1000 条消息

https://tva1.sinaimg.cn/large/e6c9d24ely1h02pj5icrkj22gm08gq4v.jpg
https://tva1.sinaimg.cn/large/e6c9d24ely1h02pj5icrkj22gm08gq4v.jpg

RocketMQ 控制台安装

RocketMQ 提供了一个控制台,提供对 RocketMQ 的一些运维功能。由于我的服务器上没有maven,所以就不使用源码的方式安装了,我们直接通过 Docker 的方式安装,简单方便。

如果服务器上开启了防火墙,对需要的端口号进行放开,如果使用控制台需要开放三个端口 8080、10909、10911。

# 下载镜像
docker pull apacherocketmq/rocketmq-dashboard:latest
# 运行镜像
docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876" -p 8080:8080 -t apacherocketmq/rocketmq-dashboard:latest

访问 http://localhost:8080/#/ 如果出现如下界面,说明安装成功了。

https://tva1.sinaimg.cn/large/e6c9d24ely1h02q126erkj21dv0u0dik.jpg
https://tva1.sinaimg.cn/large/e6c9d24ely1h02q126erkj21dv0u0dik.jpg

IDEA 运行

使用 Linux 搭建可以不占用本地资源,体验 RocketMQ 的功能,但对于大多数开发来说都想 Debug 下源码看看。这个时候就需要使用 IDEA 启动源码来运行了。

步骤一:从 https://github.com/apache/rocketmq 下载源码到本地

git clone https://github.com/apache/rocketmq.git

步骤二:使用 IDEA 打开源码并编译

mvn clean compile -U -Dmaven.test.skip=true
https://tva1.sinaimg.cn/large/e6c9d24ely1h03ubyd92ej211y0nytfk.jpg
https://tva1.sinaimg.cn/large/e6c9d24ely1h03ubyd92ej211y0nytfk.jpg

步骤三:创建一个 RocketMQ 的运行目录,用来存放配置文件。在启动 NameServer 和 Broker 的时候需要使用到。

mkdir rocketmq

# 将 distribution/conf 目录下的 logback_namesrv.xml 和 logback_broker.xml 文件复制到创建的 rocketmq 目录下
# 将 distribution/conf 目录下的 broker.conf 复制到 rockermq/conf 目录下

调整 brocker.conf 配置为:

brokerClusterName = DefaultCluster
brokerName = broker-a 
brokerId = 0
deleteWhen = 04 
fileReservedTime = 48
brokerRole = ASYNC_MASTER 
flushDiskType = ASYNC_FLUSH
storePathRootDir=/Users/lixiaoshuang/rocketmq/store 
storePathCommitLog=/Users/lixiaoshuang/rocketmq/store/commitlog
namesrvAddr=本机ip:9876
brokerIP1=本机ip
autoCreateTopicEnable=true

步骤四:启动 org.apache.rocketmq.namesrv.NamesrvStartup,首先设置 ROCKETMQ_HOM。

https://tva1.sinaimg.cn/large/e6c9d24ely1h03ugtqh0sj21b00u0n0y.jpg
https://tva1.sinaimg.cn/large/e6c9d24ely1h03ugtqh0sj21b00u0n0y.jpg

启动后输出如下日志表示启动成功:

https://tva1.sinaimg.cn/large/e6c9d24ely1h03ui4sp3rj21fa0ao75h.jpg
https://tva1.sinaimg.cn/large/e6c9d24ely1h03ui4sp3rj21fa0ao75h.jpg

步骤五:启动 org.apache.rocketmq.broker.BrokerStartup ,也要设置下 ROCKETMQ_HOM ,不过这里还要设置下 broker.conf 的路径作为参数

https://tva1.sinaimg.cn/large/e6c9d24ely1h03ul5tu0pj21bk0u0gq0.jpg
https://tva1.sinaimg.cn/large/e6c9d24ely1h03ul5tu0pj21bk0u0gq0.jpg

启动后输出如下日志表示启动成功:

https://tva1.sinaimg.cn/large/e6c9d24ely1h03undawj9j21mu0b8myt.jpg
https://tva1.sinaimg.cn/large/e6c9d24ely1h03undawj9j21mu0b8myt.jpg

分类:

后端

标签:

后端

作者介绍

俩佑
V1