首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

RocketMQ原理解析-NameServer

RocketMQ原理解析-NameServer

Namesrv名称服务,是没有状态可集群横向扩展。
1.      每个broker启动的时候会向namesrv注册2.      Producer发送消息的时候根据topic获取路由到broker的信息3.      Consumer根据topic到namesrv获取topic的路由到broker的信息
一:Namesrv功能:
   接收broker的请求注册broker路由信息(包括master和slave)   接收client的请求根据某个topic获取所有到broker的路由信息

二:Namesrv启动流程:

三: RouteInfoManager 路由信息RouteInfoManager类的管理[url=][/url]
brokerName表示一组broker,如:一个叫brokerName=broker-a, 可能包括一个master跟它的多个slaveMap<brokerName, brokerData>brokerData 由brokerName和它的broker ids和address                   id表示是master还是slave                   id= 0为master  大于0为slaveMap<topic, List<queueData>>queueData由brokerName, 读队列数,写队列数,已经权限值Map<clusterName,Set<brokerName>>  将broker按照集群分组Map<brokerAddr, BrokerLiveInfo> BrokerLiveInfo 代表一个活的broker链接由最后更新时间,一个链接channel,数据版本和Ha地址组成Broker定时向namesrv注册并更新BrokerLiveInfo的时间戳[url=][/url]


四:Namesrv与broker间的心跳:[url=][/url]
1.      Broker启动的时候会启动定时任务,每隔十秒钟会向所有namesrv发送心跳请求,同时也是注册topic信息到namesrv2.      namesrv接收borker心跳DefaultRequestProcessor的REGISTER_BROKE事件处理,(1)      注册broker的topic信息(2)      构建或者更新BrokerLiveInfo的时间戳3.      NamesrvController初始化时启动线程定时调用RouteInfoManger的scanNotActiveBroker方法来定时清理不活动的broker
(默认两分钟没有向namesrv发送心跳更新BrokerLiveInfo时间戳的),比较BrokerLiveInfo的时间戳,如果过期关闭channel连接[url=][/url]

返回列表