RocketMQ源码解析——搭建RocketMQ源码环境

目录:

  • RocketMQ源码解析——搭建源码环境
  • RocketMQ源码解析——NameServer
  • RocketMQ源码解析——Broker
  • RocketMQ源码解析——Producer
  • RocketMQ源码解析——消息存储
  • RocketMQ源码解析——Consumer

本文旨在使用idea从远程仓库中将RocketMQ源码拉取到本地,并配置搭建环境,运行源码中的示例。

依赖环境:
Idea
JDK8
RocketMQ源码(从github或者gitee上拉取代码即可,本文是从gitee上拉取的源码)

1. 从远程拉取RocketMQ源码:

拉取后的源码目录如下:
RocketMQ源码解析——搭建RocketMQ源码环境_第1张图片

2. 创建配置文件目录:

面对以上的源码目录,代码还不能运行,因为缺少对应的配置文件目录
因此,需要完成以下操作:

  • 在项目根目录下创建conf目录
  • 将distribution/conf目录下的logback_broker.xml和logback_namesrv.xml复制粘贴到刚创建的conf目录下
    RocketMQ源码解析——搭建RocketMQ源码环境_第2张图片

3. 介绍RocketMQ核心组件(NameServer、Broker、Producer、Consumer):

在开始下一步操作之前,我们需要先了解RocketMQ的核心组件,了解它们的在MQ中扮演的角色,以及作用。只有了解了这些,才能在之后的操作中知其所以然。
那么请看下图:
RocketMQ源码解析——搭建RocketMQ源码环境_第3张图片

  • NameServer:可以说是整个RocketMQ的注册管理中心。Broker、Producer、Consumer结点启动或者关闭都需要向NameServer发送通知,告知本结点的状态,让NameServer对所有结点进行管理
  • Broker:包含了Topic主题、Queue队列,以及Message消息。每启动一个Broker就会向NameServer注册自己的信息,它的作用是接收消息、存储消息,以及分发消息
  • Producer:消息的生产者。每启动一个Producer就会向NameServer注册自己的信息,在发送消息之前,会从NameServer的注册信息中通过Topic/Queue的匹配,获取对应的Broker地址,并向其发送消息
  • Consumer:消息的消费者。每启动一个Consumer就会向NameServer注册自己的信息,提前通过NameServer的注册信息中匹配并监听对应的Broker,一旦有消息就拉取消费

4. 启动NameServer:

从以上的介绍可以知道,若想要正常运行其他组件,那么NameServer首当其冲,是必须先启动的。因此,找到对应的NamesrvStartup启动类,并尝试启动:

RocketMQ源码解析——搭建RocketMQ源码环境_第4张图片
可以看到,启动失败,并提示:Please set ROCKETMQ_HOME variable in your environment to match the location of the RocketMQ installation
这句话的意思是需要在启动类中设置本地RocketMQ启动路径,因此,在idea中打开NamesrvStartup启动类的配置,并加入以下配置:
RocketMQ源码解析——搭建RocketMQ源码环境_第5张图片
添加配置完成后,再次启动:
RocketMQ源码解析——搭建RocketMQ源码环境_第6张图片
boot success 启动成功

5. 启动Broker:

启动Broker也是同样的道理,找到需要设置本地RocketMQ的启动路径(和上一步设置NameServer的步骤一样,在此不赘述),以及它还需要多做一步,启动时指定broker.conf配置文件。

broker.conf配置文件内容如下:

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
# namesrvAddr地址
namesrvAddr=127.0.0.1:9876
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
autoCreateTopicEnable=true

# 存储路径
storePathRootDir=D:\\RocketMQSource\\dataDir
# commitLog路径
storePathCommitLog=D:\\RocketMQSource\\dataDir\\commitlog
# 消息队列存储路径
storePathConsumeQueue=D:\\RocketMQSource\\dataDir\\consumequeue
# 消息索引存储路径
storePathIndex=D:\\RocketMQSource\\dataDir\\index
# checkpoint文件路径
storeCheckpoint=D:\\RocketMQSource\\dataDir\\checkpoint
# abort文件存储路径
abortFile=D:\\RocketMQSource\\dataDir\\abort

配置Broker启动类:
RocketMQ源码解析——搭建RocketMQ源码环境_第7张图片
最后运行BrokerStartup启动类:
RocketMQ源码解析——搭建RocketMQ源码环境_第8张图片

6. 启动消息生产者

在启动生产者的时候,会有一个很恶心的坑(本人也是被坑了一晚)
首先找到MQClientAPIImpl类(它是用于MQ客户端发送请求的类,例如发送消息),再找到以下代码行,并将null改为"127.0.0.1:9876"(如果不修改,那么在启动消息生产者发送消息的时候,它会一直报错connect null failed,真tm坑)
RocketMQ源码解析——搭建RocketMQ源码环境_第9张图片
那么接下来就找到quickstart包下的Producer消息生产者启动类,进行启动:
RocketMQ源码解析——搭建RocketMQ源码环境_第10张图片
消息成功发送

7. 启动消息消费者:

同样的启动quickstart包中的Consumer消息消费者启动类:
RocketMQ源码解析——搭建RocketMQ源码环境_第11张图片
消息消费成功

你可能感兴趣的:(RocketMQ,Java,java)