启动过程
NameServer模块下的代码结构,项目启动类为NamesrvStartup。启动过程主要做了如下几件事情。
- 读取配置文件和命令行参数
- 初始化并启动netty服务端和netty客户端
- 初始化并启动NamesrvController,注册processor,提供对外接口
代码目录结构
对外接口
processor目录下则为主要的对外接口。通过梳理NameServer的接口,以了解更多的功能细节。
我选择的源码版本是5.1.4 源码地址来进行学习,如下是来自官方的架构图
按照5.0弹性无状态代理模式的架构图,我们可以将RocketMQ 分为如下主要模块:
Console/MqAdmin
Proxy
Broker (local模式下与Proxy部署在同一个进程,cluster模式下和Proxy分为两个进程部署)
NameServer
Controller(ControllerManager) 可以和NameServer部署在同一个进程
该组件使得RocketMQ具有,主备自动切换的能力。
6.各种语言的Client
各个组件的功能作用,后面再一个个分析和解释。但我想有些中间件和架构爱好者看这个图,就能大概知道各个组件有啥用途。
最近上班比较清闲,之前一直在微信读书上读了不少闲书。颇有游手好闲,不务正业的样子。最近内心思索半天,觉得这样下去自己的职业生涯可能走不远。又由于最近公司在考虑消息队列的选型,所以想着花点时间去深入了解一下消息队列的机制。一方面是对RocketMQ比较感兴趣;另一方面也是希望对所学的技术做一个记录,将来出去面试,作为展示自我技术学习成果的窗口。
为什么选择RocketMQ?
Java 事务消息 社区活跃 支撑阿里的业务
我准备带着一些问题去进行阅读,相比于一头扎进代码海洋,这样更有针对性,并且收获可能更大。这样的一个大型开源产品,不去看一些细枝末节的细节,可能更有效率,也更节约时间。
带着哪些问题去看?
1、NameServer服务注册机制?
2、消息底层文件存储机制?
3、定时消息实现机制?
4、顺序消息实现机制?
5、事务型消息实现机制?
6、高可用、故障转移机制?