美文网首页
RocketMQ Broker启动源码笔记

RocketMQ Broker启动源码笔记

作者: 三分归元币 | 来源:发表于2020-11-06 14:36 被阅读0次

    整体模块

    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的逻辑了。

    相关文章

      网友评论

          本文标题:RocketMQ Broker启动源码笔记

          本文链接:https://www.haomeiwen.com/subject/tostbktx.html