作者:孤鹜1101 | 来源:互联网 | 2023-09-25 12:37
在将RocketMQ源码导入开发工具后,主要有以下几步要做:
- 编译
- 启动namesrv
- 启动broker
1. 编译
解压导入idea,修改配置文件pom.xml,jdk编译版本为1.8
在IDEA的Ternimal界面执行编译:
# 编译
mvn -Prelease-all -DskipTests clean install -U
2. 启动namesrv
在org.apache.rocketmq.namesrv.NamesrvStartup#createNamesrvController的位置修改源码,增加rocketHome的配置。启动的时候就可以找到这个环境变量了。
接着要在rocketmq运行目录中创建需要的目录结构以及拷贝配置文件的操作。
具体需要在rocketmq-nameserver运行目录中创建需要的目录结构,此时需要创建conf、logs、store三个文件夹,用于后续NameServer运行时使用。
然后把RocketMQ源码目录中的distrbution目录下的broker.conf、logback_namesvr.xml两个配置文件拷贝到刚才创建的conf目录中 ,接着就是修改这两个配置文件。
首先修改logback_namesvr.xml文件,修改里面的日志的目录,修改为你的rocketmq运行目录中的logs目录。里面有很多的${user.home},要直接把这些 ${user.hom} 全部替换为你的 rocketmq运行目录就可以了。
接着就是修改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=J:\gitee\rocketmq-master\distribution\targets\rocketmq-mq\store
storePathCommitLog=J:\gitee\rocketmq-master\distribution\targets\rocketmq-mq\store\commitLog
storePathCOnsumeQueue=J:\gitee\rocketmq-master\distribution\targets\rocketmq-mq\store\consumequeue
storePathIndex=J:\gitee\rocketmq-master\distribution\targets\rocketmq-mq\store\index
storeCheckpoint=J:\gitee\rocketmq-master\distribution\targets\rocketmq-mq/store/checkpoint
abortFile=J:\gitee\rocketmq-master\distribution\targets\rocketmq-mq/abort
启动配置如下:
最后就是启动NameServer了,右击NamesvrStartup类,选择Debug NamesvrStartup.main()就可以用debug模式去启动NameServer了,它会自动找到ROCEKTMQ_HOME环境变量,这个目录就是你的运行目录,里面有conf、logs、store几个目录。
它会读取conf里的配置文件,所有的日志都会打印在logs目录里,然后数据都会写在 store 目录里,启动成功之后,在 Intellij IDEA 的命令行里就会看到下面的提示:
Connected to the target VM, address: '127.0.0.1:55891', transport: 'socket'
The Name Server boot success. serializeType=JSON
3.启动broker
用创建NameServer启动配置的方式再创建一个,Name中输入BrokerStartup,Main class可以选择broker模块下的BrokerStartup类,Use classpath of module中可以选择broker这个module,具体的配置如下图所示:
由于前面已经将broker.conf文件拷贝到启动目录的 “con/”目录下并配置好了,所以这里不需要再做修改。
不过这里要将rocketmq-master源码目录下的distribution里的一个logback-broker.xml文件拷贝到运行目录的conf目录中去,然后修改里面的地址,把 ${user.home}都修改为rocketmq的运行目录。
启动Broker
接着就可以使用debug模式启动BrokerStartup类了,这里右击Debug BrokerStartup.main()就可以启动它。如果控制台出现以下的一段提示,就说明broker启动成功过了:
Connected to the target VM, address: '127.0.0.1:54101', transport: 'socket'
The broker[wushaopei, 169.254.178.74:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876
然后在rocketmq运行目录下的logs中,会找到一个子目录是rocketmqlogs,里面有一个broker.log,就可以看到Broker的启动日志了,如下所示:
2021-07-29 22:20:00 INFO main - Try to start service thread:AllocateMappedFileService started:false lastThread:null
2021-07-29 22:20:00 INFO main - load C:\Users\wushaopei\store\config\delayOffset.json OK
2021-07-29 22:20:03 INFO main - Set user specified name server address: 127.0.0.1:9876
2021-07-29 22:20:03 WARN main - Load default transaction message hook service: TransactionalMessageServiceImpl
2021-07-29 22:20:03 WARN main - Load default discard message hook service: DefaultTransactionalMessageCheckListener
2021-07-29 22:20:03 INFO main - The broker dose not enable acl
2021-07-29 22:20:03 INFO main - Try to start service thread:ReputMessageService started:false lastThread:null
2021-07-29 22:20:03 INFO main - Try to start service thread:AcceptSocketService started:false lastThread:null
2021-07-29 22:20:03 INFO main - Try to start service thread:GroupTransferService started:false lastThread:null
2021-07-29 22:20:03 INFO main - Try to start service thread:HAClient started:false lastThread:null
2021-07-29 22:20:03 INFO main - load C:\Users\wushaopei\store\config\delayOffset.json OK
2021-07-29 22:20:03 INFO main - Try to start service thread:FlushConsumeQueueService started:false lastThread:null
2021-07-29 22:20:03 INFO main - Try to start service thread:FlushRealTimeService started:false lastThread:null
2021-07-29 22:20:03 INFO main - Try to start service thread:StoreStatsService started:false lastThread:null
2021-07-29 22:20:04 INFO main - Try to start service thread:FileWatchService started:false lastThread:null
2021-07-29 22:20:04 INFO FileWatchService - FileWatchService service started
2021-07-29 22:20:04 INFO main - Try to start service thread:PullRequestHoldService started:false lastThread:null
2021-07-29 22:20:04 INFO PullRequestHoldService - PullRequestHoldService service started
2021-07-29 22:20:04 INFO main - Try to start service thread:TransactionalMessageCheckService started:false lastThread:null
2021-07-29 22:20:04 INFO brokerOutApi_thread_1 - register broker[0]to name server 127.0.0.1:9876 OK
2021-07-29 22:20:04 INFO main - The broker[wushaopei, 169.254.178.74:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876
2021-07-29 22:20:13 INFO BrokerControllerScheduledThread1 - dispatch behind commit log 0 bytes
2021-07-29 22:20:13 INFO BrokerControllerScheduledThread1 - Slave fall behind master: 0 bytes
4.记录一个问题:
RocketMQ的源码在编译的过程中,运行路径中存在“-”的话,会发生转义将后面一个路径拼接到前面,比如:“rocketmq-master/distribution”这个路径是从RocketMQ的github上download下来文件的路径,但是,在配置好启动broker后,在源码执行过程中会发生转义变成“rocketmq-masterdistribution” 。