主题列表:rocketmq namesrv源码学习系列
rocketmq namesrv启动,工作源码流程剖析---
1.namesrv启动入口
2.首先会创建NamesrvController对象,加载如下图所示的namesrvConfig和NettyServerConfig的一些配置信息。
3.start方法会创建一个定时任务线程移除过期节点。遍历检查brokerLiveTable(存储broker的心跳版本信息)容器中元素的最后更新时间戳信息,过期移除
根据节点最后更新的时间戳加上过期移除时间小于当前时间移除失效节点,并更新其他容器中该节点信息(剔除)
namesrv主要负责存储broker的路由信息,并实现心跳检测功能,定期移除过期节点。先介绍一下RouteInfoManager的数据结构。
HashMap<String/* topic /, List> topicQueueTable; 存储topic主题的broker节点名称,读写队列数等topic信息
HashMap<String/ brokerName /, BrokerData> brokerAddrTable; 存储的broker节点名称,集群,地址等broker信息
HashMap<String/ clusterName /, Set<String/ brokerName />> clusterAddrTable; 存储的集群下的节点名称信息
HashMap<String/ brokerAddr /, BrokerLiveInfo> brokerLiveTable; 存储的节点心跳版本信息,主要是更新时间戳
HashMap<String/ brokerAddr /, List/ Filter Server */> filterServerTable;存储过滤器名称
DefaultRequestProcessor类是namesrv的核心处理类,负责接收其他客户端请求处理。包括配置信息的新增,查询,节点的注册,移除,路由信息的注册和查询等请求。
主要介绍一下broker节点注册,移除,路由查询几个方法
broker启动的时候,namesrv会接收broker的register请求,DefaultRequestProcessor.processRequest()方法根据请求类型进行不同的处理。register时最终会走下入所示的registBroker()方法。该方法会将broker节点信息更新至namesrv的几个容器之中。后续的路由信息都是从容器内获取。
unregistBroker方法则会将broker节点信息从namesrv的几个容器之内移除。
getRouteInfoByTopic方法会根据topic信息在容器内找到对应的路由信息。