很久没有学习了,从前是因为太忙,现在是因为太懒。立个flag,一定要把rocketmq源码看完!源码阅读从idea的环境搭建和debug开始~
代码下载
先将代码从github上下载下来。一共是4个模块需要启动,分别是namesvr、broker、consumer、producer,部署架构如下图所示。(图摘自官网)
代码架构
先大致捋一下代码架构,如下图所示。
核心模块如下:
- rocketmq-broker:broker主要的业务逻辑,消息收发,主从同步。
- rocketmq-client:客户端接口,生产者和消费者。
- rocketmq-namesrv:nameserver服务注册与发现。
- rocketmq-remoting:远程调用接口,封装Netty底层通信。
- rocketmq-store:消息存储核心包。
- rocketmq-common:公用数据结构等等。
- rocketmq-distribution:配置文件。
- rocketmq-example:生产者和消费者示例。
- rocketmq-logappender、rocketmq-logging:日志相关。
启动namesvr
- 设置环境变量
ROCKETMQ_HOME=[你的rocketmq项目路径]/distribution - 设置启动命令参数
-n 127.0.0.1:9876
- 增加日志输出到控制台(可选)
在distribution/conf/logback_namesrv.xml文件中增加输出到控制台 ,为了方便看日志。
- 启动NamesrvStartup
启动broker
- 设置环境变量
ROCKETMQ_HOME=[你的rocketmq项目路径]/distribution - 设置启动命令参数
-c [你的rocketmq项目路径]/distribution/conf/broker.conf
- 在distribution/conf/broker.conf 文件中增加配置
## nameserver地址 设置为本地
namesrvAddr = 127.0.0.1:9876
## 自动创建topic
autoCreateTopicEnable = true
brokerClusterName = DefaultCluster
brokerName = broker-a
## 表示master节点
brokerId = 0
## 在每天4点清理过期数据
deleteWhen = 04
## 数据保存时间为4h
fileReservedTime = 48
brokerRole = ASYNC_MASTER
## 异步刷盘
flushDiskType = ASYNC_FLUSH
## 这个master节点的ip地址 设置为本地
brokerIP1 = 127.0.0.1
- 增加日志输出到控制台(可选)
在distribution/conf/logback_broker.xml文件中增加输出到控制台 ,为了方便看日志。
- 启动BrokerStartup
启动consumer
在example模块下的simple包里找到PushConsumer,设置nameserver后可启动。
启动producer
在example模块下的simple包里找到Producer,设置nameserver后可启动。
producer发送完在consumer的控制台上观察是否接收到即可。