RocketMQ本地源码启动

1,820 阅读3分钟

「这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战

源码下载

在读RocketMQ源码的时候,我们首先需要将源码从开源网站下将源码下载到本地,然后启动起来,这样可以方便我们在读源码的时候,有些地方读不懂,可以采取本地Debug的方式来跟踪执行的结果,方便我们更好的理解作者的设计思想。源码下载地址:

www.apache.org/dyn/closer.…

将源码下载到本地后,导入到Idea中,配置maven地址,导入完依赖即可 image.png

启动MQ

启动Namesrv模块

在工程中找到启动类:NamesrvStartup,启动里面的main方法,直接启动汇报:

Please set the ROCKETMQ_HOME variable in your environment to match the location of the RocketMQ installation

需要配置ROCKETMQ_HOME 环境变量,在启动NamesrvStartup的时候加上环境变量

ROCKETMQ_HOME=E:\workspace\源码\rocketmq\rocketmqHome

image.png

这个时候启动还是会报错 image.png 可以看出,这是在启动的时候会去配置的目录中,找conf目录下的logback_namesrv.xml 日志配置文件,在配置的目录下创建conf目录,然后将源码distribution目录下的conf目录中的:logback_namesrv.xml 拷贝过去,再次启动即可

The Name Server boot success. serializeType=JSON

启动Broker模块

在工程类中找到rocketmq-broker模块下的BrokerStartup类中的main方法,然后启动,在启动的时候也会出现:

Please set the ROCKETMQ_HOME variable in your environment to match the location of the RocketMQ installation

也需要在启动环境中配置:ROCKETMQ_HOME,在配置完成后,再次启动会报下面的错误: image.png

这个时候需要将distribution目录下conf中的logback_broker.xml文件拷贝到配置的目录下的conf后,再次启动就会启动成功

The broker[silly, 192.168.0.103:10911] boot success. serializeType=JSON

在distribution目录下还有个broker.conf文件,这个文件用来设置broler启动的参数信息,在启动的时候需要指定文件文件的所在地方

-c E:\workspace\源码\rocketmq\rocketmqHome\conf\broker.conf

image.png

这个时候启动会出现下面的提示:

The broker[broker-a, 192.168.0.103:10911] boot success. serializeType=JSON

可以看出,这次启动的broler的名字是broker-a,是因为broker.conf 中的brokerName配置的,说明此次启动读到了我们指定的配置文件

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH

验证启动结果

发送消息

使用源码中提供的生产者和消费者代码来验证是否启动成功,找到rocketmq-example中的生产者代码:

org.apache.rocketmq.example.quickstart.Producer

修改源码, 这是NameServer地址后启动

producer.setNamesrvAddr("127.0.0.1:9876");

这个时候启动会报错

org.apache.rocketmq.client.exception.MQClientException: No route info of this topic: TopicTest

image.png 表示在发送的是否没有TopicTest,需要需要我们在broker.conf文件中加一行配置,topic在使用的时候允许客户端自动创建,重新启动broker

autoCreateTopicEnable = true

但是小编这里再次发送MQ的时候也会出现上面的问题,后来我在broker.conf文件中,配置了NameServer地址

namesrvAddr = 127.0.0.1:9876

在重新启动broker,就会打印下面那样的启动信息

The broker[broker-a, 192.168.0.103:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876

再次发送消息,就会发送成功 image.png

消费消息

找到org.apache.rocketmq.example.quickstart.Consumer 这个类中的代码,指定NameServer的地址后启动

consumer.setNamesrvAddr("127.0.0.1:9876");

可查看到控制台打印的消费者日志 image.png

通过上面的步骤,一个基本的RocetMQ单机版本,通过源码启动成功。

小配置

日志文件目录设置

在启动的时候,日志配置文件是将日志打印到${user.name},自己认为不好找日志,就把日志打印到ROCKETMQ_HOME下的logs配置文件中,需要将日志文件中的user.name替换为:ROCKETMQ_HOME,然后重启,就会将日志记录到自定义的logs下

image.png