前言:主要是用于管理所有的broker信息,让producer和consumer都能获取到正确的broker信息,进行业务处理。这是一个类似于zookeeper的服务治理中心。
(一)功能
1,Broker启动时候会向Namesrv发送注册请求,Namesrv接收broker的请求注册路由信息和保存活跃的broker列表,包括Master和Slave
2,用来保存所有topic和该topic所有队列的列表
3,NameServer用来保存所有broker的Filter列表
4,接收Producer和Consumer的请求,根据某个topic获取到broker的路由信息。
(二)初始化和启动过程
1,KVConfigManager类
该类会加载NameServer的配置参数,将配置参数加载保存到一个HashMap中
2,以初始化 BrokerHousekeepingService 对象为参数初始化
NettyRemotingServer 对象, BrokerHousekeepingService 对象作为该 Netty 连接中 Socket 链接的监听器( ChannelEventListener);监听与 Broker 建立的渠道的状态(空闲、关闭、异常三个状态),并调用 BrokerHousekeepingService的相应 onChannel****方法。其中渠道的空闲、关闭、异常状态均调用RouteInfoManager.onChannelDestory 方法处理。清理 RouteInfoManager 类的几个成员变量数据
3,注册默认的处理类 DefaultRequestProcessor,所有的请求均由该处理类的 processRequest 方法来处理。
4,设置两个定时任务
(1)每隔十秒钟遍历brokerLiveTable集合,查看每个broker的最后更新时间是否超过了两分钟,超过则关闭broker的渠道并清理 RouteInfoManager 类的topicQueueTable、 brokerAddrTable、 clusterAddrTable、 filterServerTable成员变量
(2)每隔 10 分钟打印一次 NameServer 的配置参数。即KVConfigManager.configTable 变量的内容。
5,启动 NameServer 的 Netty 服务端( NettyRemotingServer),监听渠道的请求信息。当收到客户端的请求信息之后会初始化一个线程,并放入线程池中进行处理,该线程调用 DefaultRequestProcessor. processRequest 方法来处理请求。
(三)处理broker的注册请求
如果收到REGISTER_BROKER请求,那么最终会调用到RouteInfoManager.registerBroker。注册完成后,返回给Broker端主用Broker的地址和主用Broker的HA服务地址
public RegisterBrokerResult registerBroker(
final String clusterName,