RocketMQ版本:3.5.8
我觉得这段时间查看RocketMq的源码的分析越来越不到位了,可是那又能怎么样,花了不少时间源码调了几遍,虽然心里明白了点,还是描述不出来,可是毕竟花时间了总要落地点什么东西吧。。。
name server启动流程:
2、初始化netty配置的socket的发送和接收的缓存大小
3、命令行参数的解析
4、NamesrvConfig、NettyServerConfig实例化,设置NettyServerConfig的默认监听端口9876
5、属性配置参数加载到上面两个配置(如果有-c参数指定了属性配置文件)
6、ROCKETMQ_HOME环境变量获得(所以这个必须配置,没有便退出了)
7、日志上下文设置(${ROCKETMQ_HOME}/conf/logback_namesrv.xml)
8、NamesrvController实例化(需要NamesrvConfig、NettyServerConfig两个配置)
NamesrvController初始化开始:
(1)kvConfig.json的加载(只在启动的时候加载这个,没有就不加载了。路径在宿主目录下namesrv文件夹下)
(2)NettyRemotingServer实例化(这里会作下当前系统的判断,是否为Linux,至于这里判断是否为linux或windows的操作也很简单,就是System.getProperty("os.name"),检查是否包含"linux"或"windows")。作这些处理也不是为什么特别的操作,就是线程名字的相关处理,因为这里初始化了不少操作,也初始化相关的一些线程池)
(3)注册请求处理器
(4)定时扫描不活动的broker(每10秒扫描一次)
(5)定时打印kv配置(每10分钟)
9、注册关闭钩子
10、NamesrvController开启(远程服务器相关配置初始化,里面有个自旋线程,一旦有响应,就进行回调)