RocketMQ源码之Broker

289 阅读3分钟

前言

之前文章已经分析了NameServer是如何启动的,今天主要是分析NameServer启动后,Broker是如何像他注册信息,发送心跳维护的。巩固之前文章的内容请看下图

在这里插入图片描述其实就是NameServer启动后,它内部有个Netty服务器监听9876端口号,之后其他的客户端就可以基于这个端口号进行长连接通信了

一、Broker启动脚本

大家看之前的文章已经知道NameServer是如何启动,那么Broker其实也是一样的通过脚本文件设置jvm进程相关的参数,然后找到启动类执行 main()方法。在这里插入图片描述

二、BrokerStartup

在这里插入图片描述

这个看过我之前的NameServer启动文章就会感觉这个很眼熟,其实都是一样的,下面直接看createBrokerController是如何创建的吧

三、BrokerController的4个核心类

在这里插入图片描述在这里插入图片描述大家看到上面创建两个Netty,分别是NettyServerConfig和NettyClientConfig会好奇为啥两个呢?为啥NameSever就一个。其实NameServer就只管接收请求返回信息。但是Broker不不一样,它既要发送信息,配置相关信息当NameServer中,还是担当服务器接收消费者,生产者的消息请求。 其实这好多代码其实就是创建出了4个核心组件用于Broker的启动,这里先有个映像,后面会有相关代码用到在这里插入图片描述

在这里插入图片描述主要就这些核心点已经讲明白了,剩下的多余代码就不说明了,大家可以自己去看。就是打印日志信息相关的了,不是本文的重点

四、创建BrokerController

前面的代码创建出4个核心类之后就该构造这个Controller对象了在这里插入图片描述在这里插入图片描述

看到上面的图大家其实就清楚了,Broker通过脚本启动,然后调用BrokerStartup启动创建4个核心组件,然后配置给BrokerController对象。最终客户端都是跟BrokerController来交互,所以会有些核心组件功能,然后broker的数据存储需要一些后台线程池的运行。

五、执行controller的初始化initialize()

在这里插入图片描述

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">在这里插入图片描述在这里插入图片描述上面只是截图了部分代码,都是主要的几个线程池创建,不同的请求对应不同的线程池,因为broker既发送给NameServer,还有需要接收消费者和生产者的请求,还有高可用的消息措施,还有一些后台定时调度的相关任务也是需要线程池来保证运行的

总结

大家要对初始化有个映像,其实就是创建Controller对象需要几个核心组件。因为这个BrokerController既要应对NameServer 所以用到了NettyClient 还要保证客户端对它的请求则有了NettyServer接收请求,还有一些功能请求拉取消息什么的线程池,最后就是一些保证Broker运行的一些后台定时线程。

写在最后,感谢点赞关注收藏转发

欢迎关注我的微信公众号 【猿之村】

来聊聊Java面试 加我的微信进一步交流和学习,微信手动搜索 【codeyuanzhicunup】添加即可 如有相关技术问题欢迎留言探讨,公众号主要用于技术分享,包括常见面试题剖析、以及源码解读、微服务框架、技术热点等。