前言
上一篇在讲到createNamesrvController方法的时候,根据NamesrvConfig
和NettyServerConfig
对象生成了一个NamesrvController
对象,当时并没有deep到该类中,所以这篇来记录一下NamesrvController构造函数的分析。
NamesrvController类
下面是NamesrvController的构造类,这里重点关注的是kvConfigManager
、routeInfoManager
、brokerHousekeepingService
。
1 | public NamesrvController(NamesrvConfig namesrvConfig, NettyServerConfig nettyServerConfig) { |
kvConfigManager
KVConfigManager作用:
针对上面我有一个疑惑,就是kvConfig.json保存了什么配置呢?服务的一些配置不是在NamesrvConfig和NettyServerConfig中保留了吗?!1.加载namesrvController指定的kvConfig配置文件(常为xxx/kvConfig.json)到内存进行读取、增加、删除kvConfig记录。
2.将内存记录的配置,持久化到文件
3.打印所有kvConfig配置
KVConfigManager有三个主要成员变量:
1 | public class KVConfigManager { |
RouteInfoManager
RouteInfoManager实例中保存了整个消息集群的相关信息,这个是关键类,所以后面对其还需要进一步阅读:
1 | public class RouteInfoManager { |
BrokerHousekeepingService
该类负责Broker连接事件的处理,实现了ChannelEventListener,主要用来管理RouteInfoManager的brokerLiveTable。BrokerHousekeepingService实现了ChannelEventListener接口, 并且NettyRemotingServer启动时会启动BrokerHousekeepingService。
BrokerHousekeepingService会对连接事件, 连接关闭事件, 异常事件,闲置事件进行处理,进而来判断管理存活的broker。
1 | public class BrokerHousekeepingService implements ChannelEventListener { |
上面四个方法在监听到事件时,就会触发RouteInfoManager的onChannelDestroy()方法,这个方法比较关键的,所以后面单独抽出来讲。