准备阶段
获取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