RocketMQ Broker启动源码笔记

整体模块

image.png

按照rocketmq的设计,broker是专门存储queue、topic的对象关系的,而这些存储需要一个中心化的信息中心,也就是namesrv了,所以我们可以分为两个模块去了解。
namesrv,其实就是相当于一个注册中心,他是AP系统也好CP系统也好,他在MQ整体的一个作用就是充当“分诊台”。比如,我要找XXX topic的queue它在哪台ip上,等等的作用。
broker,属于消息存储的核心模块,它负责消息的接收,处理,存储和下发。接收端采用netty高性能地处理消息,存储使用高可用的write ahead logging,使用日志先行的方式保证消息的不丢失。

我们来梳理一下这个中间件的入口代码。

启动类

org.apache.rocketmq.broker.BrokerStartup#main

这个启动类,有两个过程,一个是读取配置创建BrokerController,另一个是把其中配置好的线程池啊,netty服务端这些给启动了。

    public static void main(String[] args) {
        start(createBrokerController(args));
    }

启动流程图

rocketmq启动流程.png

源码细节

image.png
image.png
image.png
image.png
image.png

由上述图片可知,通过RemotingCommand来区分传过来的code走哪个processor,看到send message大部分的handler是org.apache.rocketmq.broker.processor.SendMessageProcessor,
因此debug的入口就是这个类的processRequest方法。

整体可以归纳为,加载配置,创建各种处理线程池,以及netty服务端,并且把handler加入到netty的处理队列中,最后把这些服务都启动。

下一步要深入地去看SendMessageProcessor,就可以看出不同的处理消息的逻辑,以及commitLog的逻辑了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。