RocketMQ之NameServer源码分析

357 阅读3分钟

前言

很多人都说源码难,下不去手,买了书看也不行,看视频别人讲解也是很迷茫,那么源码到底难不难呢?难。但是如果你掌握了一个好的方法,看下去还是很轻松的。那么如何看呢?这里简单的说下:其实你要带着问题去看源码?为什么这么说呢? 就拿我今天给大家分享的rocketmq的源码,了解rocket的大家都知道 它的启动需要 NameServer, broker 依次启动, 消费者,生产者都需要跟nameServer进行通信,broker需要注册信息等等 那么是如何完成的呢?这就是一个问题。但是研究这个问题前大家是不是会想NameServer是如何启动的呢?又是如何能监听到客户端的请求呢?来吧,由我带你去依次解决这个问题。

一、NameServer的启动?

大家先对下面这个图有个映像再往下看在这里插入图片描述

大家有过使用经验的都知道 启动都会有脚本,根据你系统环境选择不同的脚本,如下在这里插入图片描述我这里不想拉的篇幅特别大,就直接告诉大家,他其实就是通过一个脚本找入口类的main()方法 NamesrvStartup.class tip:runserver.sh 这个脚本其实就是设置这个rocketmq的jvm的一些参数,生产配置优化 需要调整在这里插入图片描述

二、NamesrvStartup 入口类

其实看代码就看关键的,不懂的直接跳,千万别扣细节,千万别扣细节,千万别扣细节。在这里插入图片描述

三、createNamesrvController

在看 createNamesrvController 方法前,带着大家整理下思路。看这名称就是知道这个方法是要创建一个controller方法,那么创建出是干什么用的呢?大胆的猜想:controller一般就是接收用户请求,那对mq中所谓的用户都有谁呢?不就是 broker像NameServer注册,其他生产者,消费者获取元数据请求,这样一想是不是清楚多了在这里插入图片描述

上面的看懂了,就通过工具直接点进去看 createNamesrvController 这个方法呗 其实这个方法代码特别多,但是对于我们只是想研究其中的逻辑,其实不用全部看的,下面我只说明关键的一部分:在这里插入图片描述

其实这里就可以给你一个结论:这个方法主要就是创建了 2个对象, NamesrvConfig 和 NettyServerConfig

NamesrvConfig

在这里插入图片描述

NettyServerConfig

rocketmq通信大量用了netty,这里不讲解netty相关的,大家不用理解,只需要知道干嘛即可。有机会我给大家讲解下netty的api大家就懂了,netty难的是底层网络io,而不是api的使用。在这里插入图片描述

在这里插入图片描述

四、start方法

controller已经创建完成,那么就开始启动了。看代码在这里插入图片描述

五、initialize()初始化

在这里插入图片描述详细介绍initialize在这里插入图片描述

NettyServer构造在这里插入图片描述

六、然后start收尾

其实NameServer的启动没啥的,基本就是创建Netty服务器,都是对netty Api的封装。在这里插入图片描述

总结

NameServer相信大家看完了,感觉so easy吧。 其实 rocketMQ源码没那么难,只要带着问题去看,不懂就跳,爱谁谁。后面等我研究研究broker的最近更新。主要是成迷于狼人杀无法自拔最近,更新的少了哈哈哈

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

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

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