准备阶段

获取RocketMQ

RocketMQ可以从Apache上下载代码或可执行包,但从GitHub上获取源码到本地可能更为方便,至少也可以及时更近新的变化。

编译RocketMQ

RocketMQ使用Maven进行包管理,从GitHub获取代码之后,命令行下进行编译,

mvn -Prelease-all -DskipTests clean install -U

将会在distribution/target/apache-rocketmq/bin目录下生成可执行的脚本。

环境配置

为了通过RocketMQ提供的启动脚本启动RocketMQ各项组件,需要先设置环境变量ROCKETMQ_HOME,将其值配置到distribution/target/apache-rocketmq目录,

export ROCKETMQ_HOME=/path/to/distribution/target/apache-rocketmq

启动服务

启动Name Server

运行mqnamesrv启动Name Server,

nohup sh mqnamesrv > ns.log 2>&1 &

启动Broker

默认配置启动

运行mqbroker启动Broker,

nohup sh mqbroker -n localhost:9876 > broker.log 2>&1 &

启动多个Broker

实际开发情况下为了测试验证多Broker的情况,有必要在本地启动多个Broker。默认配置启动会有各项冲突,因此需要制定不同的配置进行启动,

Broker需要监听端口以及读写文件数据,通过配置文件修改端口以及存储路径,可以在单机上启动多个实例。与之相关的配置文件对应的Java类在BrokerStarup中可以找到,分别有BrokerConfig、NettyServerConfig、NettyClientConfig、MessageStoreConfig。

以启动两个Broker Cluster为例,分别配置为,

# broker1.properties
brokerClusterName=Cluster1
brokerName=broker1
brokerId=0
listenPort=10911
haListenPort=10912
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
# broker2.properties
brokerClusterName=Cluster2
brokerName=broker2
brokerId=0
listenPort=10921
haListenPort=10922
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
storePathRootDir=/path/to/store
storePathCommitLog=/path/to/commit

启动之时通过-c指定配置文件,

nohup sh mqbroker -n localhost:9876 -c broker1.properties > broker1.log 2>&1 &
nohup sh mqbroker -n localhost:9876 -c broker2.properties > broker2.log 2>&1 &

测试服务状态

分别启动Producer/Consumer收发消息来进行处理,需要先设置Name Server地址

export NAMESRV_ADDR=localhost:9876
tools.cmd org.apache.rocketmq.example.quickstart.Producer
tools.cmd org.apache.rocketmq.example.quickstart.Consumer

关停服务

运行mqshutdown进行关停,

关停Name Server,

./mqshutdown namesrv

关停Broker

./mqshutdown broker

配置Intellij IDEA

为了便于阅读代码,理顺调用流程。可以使用Intellij IDEA提供的调试功能。断点调试对于阅读代码还是有很大帮助的。

Intellij IDEA工具栏中找到Run -> Edit Configurations -> add remote。Debugger mode选择Attach,Listen按理应该可行,但后续配置的时候遇到些问题,暂时先用Attach形式。

启动服务时设置添加JAVA_OPT参数,添加与Remote Debug中对应的调试端口信息,

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005