前言
很多人都说源码难,下不去手,买了书看也不行,看视频别人讲解也是很迷茫,那么源码到底难不难呢?难。但是如果你掌握了一个好的方法,看下去还是很轻松的。那么如何看呢?这里简单的说下:其实你要带着问题去看源码?为什么这么说呢? 就拿我今天给大家分享的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】添加即可 如有相关技术问题欢迎留言探讨,公众号主要用于技术分享,包括常见面试题剖析、以及源码解读、微服务框架、技术热点等。