45 源码:在Intellij IDEA中启动NameServerBroker以及本地调试源码

Posted 鮀城小帅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了45 源码:在Intellij IDEA中启动NameServerBroker以及本地调试源码相关的知识,希望对你有一定的参考价值。

在将RocketMQ源码导入开发工具后,主要有以下几步要做:

  1. 编译
  2. 启动namesrv
  3. 启动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” 。

以上是关于45 源码:在Intellij IDEA中启动NameServerBroker以及本地调试源码的主要内容,如果未能解决你的问题,请参考以下文章

在Intellij IDEA中使用Debug

如何在 IntelliJ IDEA 14 中为当前项目工作配置注释处理?

如何在IntelliJ Idea中同时启动不同端口

如何在IntelliJ Idea中同时启动不同端口的两个实例

Idea 配置启动JDK___在windows中使用Intellij Idea时选择自定义的64位JVM

Intellij IDEA将java源码打成jar包