RocketMQ之Broker源码分析

前言

之前文章已经分析了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()

" style="box-sizing: border-box; margin: 20px auto; color: rgb(63, 63, 63); line-height: 1.5; border-radius: 4px; display: block; width: 315px;" class="" data-ratio="0.6506329113924051" data-w="1185" data-type="png">上面只是截图了部分代码,都是主要的几个线程池创建,不同的请求对应不同的线程池,因为broker既发送给NameServer,还有需要接收消费者和生产者的请求,还有高可用的消息措施,还有一些后台定时调度的相关任务也是需要线程池来保证运行的

总结

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

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

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

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值