1. 源码导入

https://github.com/alibaba/RocketMQ 检出源码,导入到 IDEA 或者 Eclipse 中。

IDEA 的导入结果如下(省略了部分文件):

2. 主要目录介绍

目录 说明
rocketmq-broker 对consumer和producer来说是服务端,接收producer发来的消息并存储,同时consumer来这里拉取消息。
rocketmq-client 客户端,包含producer端和consumer端,发送消息和接收消息的过程。
rocketmq-common 通用的常量枚举、基类方法或者数据结构,按描述的目标来分包通俗易懂。包名有:admin,consumer,filter,hook,message等。
rocketmq-filtersrv 消息过滤器server,现在rocketmq的wiki上有示例代码及说明。同样可以直接阅读源码目录下的 wiki\filter_server_guide.md
rocketmq-namesrv NameServer,类似SOA服务的注册中心,这里保存着消息的TopicName,队列等运行时的meta信息。
rocketmq-remoting 用Netty4写的客户端和服务端,fastjson做的序列化,自定义二进制协议。
rocketmq-srvutil 只有一个ServerUtil类,类注解是,只提供Server程序依赖,目的为了拆解客户端依赖,尽可能减少客户端的依赖。
rocketmq-store 存储服务,消息存储,索引存储,commitLog存储。
rocketmq-tools 命令行工具。

3. NameServer

存取 broker 的路由信息

op who when how
broker 启动的时候 向namesrv注册,包括master和slave
客户端
(Producer、
Consumer)
操作 topic 的时候 根据topic获取所有到broker的路由信息

3.1. Maven依赖图

使用 IDEA 可以看到 compile 级别的依赖图如下:

4. Broker

客户端连接、消息处理

4.1. Maven依赖图

使用 IDEA 可以看到 compile 级别的依赖图如下:

5. FilterServer

根据 Consumer 上传的 Filter 样本,在 Server 端进行消息过虑

5.1. Maven依赖图

使用 IDEA 可以看到 compile 级别的依赖图如下:

6. 解读

我们从上面三张依赖图上可以看出来,rocketmq-remoting 是几个内部依赖的最底层。

因此下一章节,我们从 rocketmq-remoting 开始。