目录
一、IDEA获取RocketMQ源码
二、IDEA调试RocketMQ源码
1、启动NameServer
2、启动Broker
3、使用RocketMQ提供的实例验证消息发送与消息消费
三、RocketMQ核心目录说明
四、参考
1、在IDEA 【VCS】菜单中选择【Check from Version Controll】,再选择【Git】:
2、URL输入RocketMQ源码地址,选择保存的本地路径:
3、点击【Clone】:状态栏有代码检出的进度
4、检出完成会弹出提示框,选择【Yes】:
5、在当前窗口打开工程,下载依赖包,依赖包下载完成后:
本节将展示IDEA中启动NameServer、Broker,并运行消息发送与消息消费示例程序。
1)展开namesrv模块,打开Run/Debug Configuration:
2)点击Environment Variables后面的按钮,弹出Environment Variables,点击“+”,在Name中输入ROCKETMQ_HOME,Value输入源码保存路径。点击OK,回到Debug Configuration界面,再点击OK。
3)在RocketMQ运行主目录中创建conf、logs、store三个文件夹:
4)从RocketMQ distribution部署目录中将broker.conf、logback_broker.xml文件复制到conf目录中:
5)logback_namesrv.xml文件,只需要修改日志文件目录:(例如下面这种)
注意:logback_broker.xml文件,也需要修改日志目录,否则broker.log会存储在默认目录
6)broker.conf文件内容如下:
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
# nameServer地址,分号分隔
namesrvAddr=127.0.0.1:9876
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 存储路径
storePathRootDir=F:\\rocketmq\\store
# commitLog 存储路径
storePathCommitLog=F:\\rocketmq\\store\\commitlog
# 消费队列存储路径
storePathConsumeQueue=F:\\rocketmq\\store\\consumequeue
# 消息索引存储路径
storePathIndex=F:\\rocketmq\\store\\index
# checkpoint 文件存储路径
storeCheckpoint=F:\\rocketmq\\store\\checkpoint
# abort 文件存储路径
abortFile=F:\\rocketmq\\store\\abort
7)Debug启动:
Connected to the target VM, address: '127.0.0.1:60542', transport: 'socket'
ch.qos.logback.core.joran.spi.JoranException: Could not open [F:\rocketmq\conf\logback_namesrv.xml].
//省略
8)找不到logback_namesrv.xml,把distribution下的logback_namesrv.xml拷贝到F:\rocketmq\conf下:
9)Debug运行NamesrvStartup:
NameServer启动成功!
1)打开broker模块,直接运行BrokerStartup:
2)提示要设置ROCKETMQ_HOME,现在配置Debug Configuration:
3)Debug运行BrokerStartup:
4)再去查看一下broker.log文件,看有没有报错:查看了所有log,没有错
注意:参考上面“5)logback_namesrv.xml文件,只需要修改日志文件目录”,去修改logback_broker.xml文件,才能在指定位置找到broker.log文件,不修改的话就是存到它的默认位置了。
1)修改org.apache.rocketmq.example.quickstart.Producer示例程序,设置消息生产者NameServer地址
2)运行该示例程序,查看运行结果,如果输出如下则表示消息发送成功:
SendResult [sendStatus=SEND_OK, msgId=C0A80071000018B4AAC26F933ABE0000, offsetMsgId=C0A8DE0100002A9F0000000000000000, messageQueue=MessageQueue [topic=TopicTest, brokerName=broker-a, queueId=3], queueOffset=0]
//省略
3)修改org.apache.rocketmq.examples.quickstart.Consumer示例程序,设置消费者的NameServer地址:
4)运行消费者程序,如果输出如下表示消息消费成功:
Consumer Started.
ConsumeMessageThread_4 Receive New Messages:
[MessageExt [queueId=3, storeSize=201, queueOffset=0, sysFlag=0,
bornTimestamp=1582358319807, bornHost=/192.168.222.1:53060, storeTimestamp=1582358319834,
storeHost=/192.168.222.1:10911, msgId=C0A8DE0100002A9F0000000000000000, commitLogOffset=0,
bodyCRC=613185359, reconsumeTimes=0, preparedTransactionOffset=0,
toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=250,
CONSUME_START_TIME=1582358829840, UNIQ_KEY=C0A80071000018B4AAC26F933ABE0000,
CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 48], transactionId='null'}]]
// 省略
5)消息发送与消息消费都成功,则说明RocketMQ调试环境已经成功搭建,可以通过Debug调试源码,探知RocketMQ的实现奥秘了。
《RocketMQ》技术内幕