RocketMQ之NameServer源码分析

前言

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

一、NameServer的启动?

大家先对下面这个图有个映像再往下看ebfdcd243a198e37291cdaf6b275a2ae.png

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

二、NamesrvStartup 入口类

其实看代码就看关键的,不懂的直接跳,千万别扣细节,千万别扣细节,千万别扣细节。9711991083c06b67ff3fb8cbee86be98.png

三、createNamesrvController

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

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

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

NamesrvConfig

a129b557c7dce5691f5c20f91c986836.png

NettyServerConfig

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

8c182b0d5886938ace1492f593c81660.png

四、start方法

controller已经创建完成,那么就开始启动了。看代码252d415b754ccc7276a34d2785485260.png

五、initialize()初始化

a7e0fc5acce625084575fdbf40b5ebe5.png详细介绍initializeda962a5275f5a8bc6846ebdd66e472ed.png

NettyServer构造dcd5e595995bff5acd56654a08fcde8c.png

六、然后start收尾

其实NameServer的启动没啥的,基本就是创建Netty服务器,都是对netty Api的封装。1e331419e5143adfb3b19b10059fb17e.png

总结

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值