1.源码下载&编译
# 1.clone 源代码
git clone https://github.com/apache/rocketmq.git
# 2.代码编译下载依赖
mvn clean install -Dmaven.test.skip=true
2.IDEA 调试环境搭建
在IDEA 中分别启动NameServer、Broker、并运行消息发送与消息消费的示例程序。
运行代码前新建任意文件夹(rocketmq_temp)作为ROCKETMQ_HOME ,并且在rocketmq_temp新建三个目录 conf 、logs、store
2.1 启动NameServer
- 从RocketMQ distribution 部署目录,拷贝broker.conf、logback_broker.xml logback_namesrv.xml 三个文件到conf 目录
- 修改broker.conf 文件内容如下
3. 修改日志文件目录
修改 logback_broker.xml、 logback_namesrv.xml 日志文件的目录为我们新建的/rocketmq_temp/logs 下;
4.配置IDEA 运行NamesrvStartup.java
展开namesrv 模块,右键debug模式运行,运行前需要配置ROCKETMQ_HOME
当控制台输出 以下提示代表启动成功
The Name Server boot success. serializeType=JSON
2.2 启动Broker
- 配置IDEA 运行BrokerStartup.java
展开broker 模块,右键debug 模式运行BrokerStartup.java,运行之前需要配置ROCKETMQ_HOME、指定broker.conf 配置文件
当控制台输出 以下提示代表启动成功
The broker[broker-a, 10.10.2.232:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876
2.3 启动Provider
- 展开example 模块,修改quickstart 目录下Producer 程序
2. 运行Provider 当控制台有以下输出结果代表消息发送成功
SendResult [sendStatus=SEND_OK, msgId=C0A81F091B4218B4AAC272FCE64E0000, offsetMsgId=C0A81F0900002A9F000000000002BEB2, messageQueue=MessageQueue [topic=TopicTest, brokerName=broker-a, queueId=3], queueOffset=250]
2.4 启动Consumer
- 展开example 模块,修改quickstart 目录下Consumer 程序
2. 运行Consumer 当控制台有以下输出结果代表消息消费成功
ConsumeMessageThread_1 Receive New Messages: [MessageExt [queueId=0, storeSize=178, queueOffset=0, sysFlag=0, bornTimestamp=1563801916906, bornHost=/10.10.2.232:53133, storeTimestamp=1563801916952, storeHost=/10.10.2.232:10911, msgId=0A0A02E800002A9F0000000000000000, commitLogOffset=0, bodyCRC=613185359, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=250, CONSUME_START_TIME=1563802089001, UNIQ_KEY=0A0A02E819B118B4AAC270BE41EA0000, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 48], transactionId='null'}]]
至此,RocketMQ 本地调试环境搭建成功!
3.RocketMQ 源代码目录结构介绍
3.1RocketMQ 核心目录说明
- broker:broker 模块(Broker 消息中转角色,负责存储消息,转发消息,其实就是RocketMQ Server;)
- client:消息客户端,包含消息生成者、消息消费者相关的类。
- common:公工包。
- dev:开发者信息。
- distribution:部署实例文件夹。
- example:RocketMQ 示例代码。
- filter:消息过滤相关基础类
- filtersrv:消息过滤服务器实现相关类。
- logappender:日志相关实现类。
- namesrv:NameServer 实现相关类(负责MQ 服务之间的协调,每一个Broker 启动的时候都会向NameServer 注册,主要接受broker 的注册,接收客户端的路由请求并返回路由信息)
- openmessaging:消息开放标准
- remoting:远程通信模块,基于Netty.
- srvutil:服务器工具类。
- store:消息存储实现相关类。
- tools:工具类,监控命令相关实现类。