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
开始。