码迷,mamicode.com
首页 > 其他好文 > 详细

RocketMQ原理解析-NameServer

时间:2016-11-11 19:33:58      阅读:334      评论:0      收藏:0      [点我收藏+]

标签:font   request   iss   技术分享   address   大于   发送消息   producer   produce   

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类的管理

brokerName表示一组broker,如:一个叫brokerName=broker-a, 可能包括一个master跟它的多个slave

Map<brokerName, brokerData>

brokerData 由brokerName和它的broker ids和address

                   id表示是master还是slave

                   id= 0为master  大于0为slave

Map<topic, List<queueData>>
queueData由brokerName, 读队列数,写队列数,已经权限值
Map<clusterName,Set<brokerName>>  将broker按照集群分组
Map<brokerAddr, BrokerLiveInfo> 
BrokerLiveInfo 代表一个活的broker链接由最后更新时间,一个链接channel,数据版本和Ha地址组成
Broker定时向namesrv注册并更新BrokerLiveInfo的时间戳

 

四:Namesrv与broker间的心跳:

1.      Broker启动的时候会启动定时任务,每隔十秒钟会向所有namesrv发送心跳请求,同时也是注册topic信息到namesrv

2.      namesrv接收borker心跳DefaultRequestProcessor的REGISTER_BROKE事件处理,

(1)      注册broker的topic信息

(2)      构建或者更新BrokerLiveInfo的时间戳

3.      NamesrvController初始化时启动线程定时调用RouteInfoManger的scanNotActiveBroker方法来定时清理不活动的broker
(默认两分钟没有向namesrv发送心跳更新BrokerLiveInfo时间戳的),比较BrokerLiveInfo的时间戳,如果过期关闭channel连接

 技术分享

 

RocketMQ原理解析-NameServer

标签:font   request   iss   技术分享   address   大于   发送消息   producer   produce   

原文地址:http://www.cnblogs.com/wxd0108/p/6055108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!