3.RocketMQ在idea中启动

文章目录

    • 启动NameServer
    • 启动Broker

启动NameServer

1.下载源码
git命令下载源码:

git clone [email protected]:apache/rocketmq.git

2.配置启动参数
2.1添加NameServer启动类
在打开RocketMQ项目的IDEA中,找到如下图:
在这里插入图片描述
点击,按照如下图操作,加载NameServer的启动类NamesrvStartup:
3.RocketMQ在idea中启动_第1张图片
3.RocketMQ在idea中启动_第2张图片
然后在该弹出框中选择要运行的模块:
3.RocketMQ在idea中启动_第3张图片
2.2 配置NameServer启动参数
NameServer启动的时候需要一个ROCKETMQ_HOME的环境变量,这个变量的值就是自己想要设置的RocketMQ运行目录了,不要跟下载的RocketMQ源码目录一样,我设置为D:\dev\rocketmq_workspace。可以在操作系统中配置,IDEA会默认加载进去。也可以在IDEA中直接添加:
3.RocketMQ在idea中启动_第4张图片
配置好之后,点击Apply和OK按钮即可,NameServer启动的时候将会使用该变量。
其实在上面的界面中,我们可以给一个类配置很多东西,包括他启动时候的JVM虚拟机的参数(VM options),包括我们要传递给他的main()方法的参数(Program options),这都是很实用的。而我们目前要配置的只是Environment Variables。

3.创建运行所需目录和文件
由于NameServer运行时需要一些固定的目录和文件,我们在上面设置的ROCKETMQ_HOME的目录中按照如下操作
3.1创建文件夹

  • 创建所需目录
    创建conf,logs,store三个文件夹,然后我们把RocketMQ源码目录中的 distrbution\bin 目录下的broker.conf、logback_namesvr.xml两个配置文件拷贝到刚才新建的conf目录中去。

  • 修改logback_namesvr.xml文件
    打开之后,将其中的${user.home}全部查找替换为你在上面设置的RocketMQ运行目录就可以了(注意需将反斜杠"“改成正斜杠”/")。

  • 修改broker.conf文件
    打开之后,按照如下配置对应修改即可:

# 以下是原始配置,不必改动
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 这是nameserver的启动地址,broker会基于该nameserver进行通信
namesrvAddr=127.0.0.1:9876
# 这是存储路径,你设置为你的rocketmq运行目录的store子目录
storePathRootDir=D:/dev/rocketmq_workspace/store
# 这是commitLog的存储路径
storePathCommitLog=D:/dev/rocketmq_workspace/store/commitlog
# consume queue文件的存储路径
storePathConsumeQueue=D:/dev/rocketmq_workspace/store/consumequeue
# 消息索引文件的存储路径
storePathIndex=D:/dev/rocketmq_workspace/store/index
# checkpoint文件的存储路径
storeCheckpoint=D:/dev/rocketmq_workspace/store/checkpoint
# abort文件的存储路径
abortFile=D:/dev/rocketmq_workspace/store/abort

4.启动NameServer
按照上面的步骤修改完毕之后,就可以启动NameServer了,右击NamesrvStartup类,执行main方法:
3.RocketMQ在idea中启动_第5张图片
NameServer会自动查找上面配置的ROCKETMQ_HOME变量,读取conf里的配置文件,所有的日志都会打印在logs目录里,然后数据都会写在store目录里,当执行成功之后,控制台将打印:

The Name Server boot success. serializeType=JSON

以后再运行NameServer的时候,直接去这里进行debug即可:

在这里插入图片描述

启动Broker

1.添加启动类和配置
1.1 添加新的启动模块 选择Edit Configurations:
3.RocketMQ在idea中启动_第6张图片
弹出框中选择添→Application:
3.RocketMQ在idea中启动_第7张图片
1.2 修改broker模块配置
我们需要修改Main class,如果在Search by Name选项中搜索不到BrokerStartup,则切换到Project选项中,选择broker模块,找到BrokerStartup,点击OK即可:
3.RocketMQ在idea中启动_第8张图片
一般情况下是可以直接搜索到的:
3.RocketMQ在idea中启动_第9张图片
手动选择Use casspath of module选项中的模块为rocketmq-broker:
3.RocketMQ在idea中启动_第10张图片
然后在Program arguments选项中为启动broker时指定配置文件:

-c D:\dev\rocketmq_workspace\conf\broker.conf

其中D:\dev\rocketmq_workspace是上一节中配置的RocketMQ的运行目录,-c会使得broker运行时查找该命令之后的文件,使用该文件中的各种参数。

最后为broker指定ROCKETMQ_HOME环境变量(这里设置跟NameServer为同一个,如果是在操作系统中添加的就不用再次添加了),这样broker在运行的时候将会使用该运行目录,基于指定的配置文件来启动,然后在logs目录下存储日志等操作。最终的配置如下图所示:
3.RocketMQ在idea中启动_第11张图片
2.添加broker配置文件
在下载的RocketMQ源码 distrbution\bin目录中,找到logback_broker.xml文件,复制到 D:\dev\rocketmq_workspace\conf目录下,打开该文件,然后修改里面的地址,把${user.home}都查找替换为你的rocketmq运行目录。

3.启动broker

在工具栏中找到debug图标,点击启动,打印如下日志

Connected to the target VM, address: '127.0.0.1:63680', transport: 'socket'
The broker[broker-a, 10.8.0.46:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876

如果启动broker之前,nameserver还没有启动,broker也不会报错,还是会打印出上面的消息。但在启动日志文件(即D:\dev\rocketmq_workspace\logs\rocketmqlogs目录下的broker.log)中则会报出问题:

2020-06-01 14:45:54 INFO main - Try to start service thread:TransactionalMessageCheckService started:false lastThread:null
2020-06-01 14:45:55 WARN brokerOutApi_thread_1 - registerBroker Exception, 127.0.0.1:9876
org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to 127.0.0.1:9876 failed
    at org.apache.rocketmq.remoting.netty.NettyRemotingClient.invokeSync(NettyRemotingClient.java:392) ~[classes/:na]
    at org.apache.rocketmq.broker.out.BrokerOuterAPI.registerBroker(BrokerOuterAPI.java:201) ~[classes/:na]
    at org.apache.rocketmq.broker.out.BrokerOuterAPI.access$000(BrokerOuterAPI.java:61) ~[classes/:na]
    at org.apache.rocketmq.broker.out.BrokerOuterAPI$1.run(BrokerOuterAPI.java:154) ~[classes/:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_131]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_131]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
2020-06-01 14:45:55 INFO main - The broker[broker-a, 10.8.0.46:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876
2020-06-01 14:46:03 INFO BrokerControllerScheduledThread1 - dispatch behind commit log 0 bytes
2020-06-01 14:46:03 INFO BrokerControllerScheduledThread1 - Slave fall behind master: 0 bytes

后启动nameserver也没问题,broker会定时根据boker.conf中配置的nameserver地址进行通信,直至注册上。最终,正确的日志如下:

2020-06-01 14:44:30 INFO FileWatchService - FileWatchService service started
2020-06-01 14:44:30 INFO main - Try to start service thread:PullRequestHoldService started:false lastThread:null
2020-06-01 14:44:30 INFO PullRequestHoldService - PullRequestHoldService service started
2020-06-01 14:44:30 INFO main - Try to start service thread:TransactionalMessageCheckService started:false lastThread:null
2020-06-01 14:44:30 INFO brokerOutApi_thread_1 - register broker[0]to name server 127.0.0.1:9876 OK
2020-06-01 14:44:30 INFO main - The broker[broker-a, 10.8.0.46:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876
2020-06-01 14:44:39 INFO BrokerControllerScheduledThread1 - dispatch behind commit log 0 bytes
2020-06-01 14:44:39 INFO BrokerControllerScheduledThread1 - Slave fall behind master: 0 bytes
2020-06-01 14:44:40 INFO brokerOutApi_thread_2 - register broker[0]to name server 127.0.0.1:9876 OK

你可能感兴趣的:(RocketMQ,中间件,redis)