标题:
RocketMQ原理解析-NameServer
[打印本页]
作者:
look_w
时间:
2018-12-18 20:39
标题:
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信息到namesrv
2
. namesrv接收borker心跳DefaultRequestProcessor的REGISTER_BROKE事件处理,(
1
) 注册broker的topic信息(
2
) 构建或者更新BrokerLiveInfo的时间戳
3. NamesrvController初始化时启动线程定时调用RouteInfoManger的scanNotActiveBroker方法来定时清理不活动的broker
(默认两分钟没有向namesrv发送心跳更新BrokerLiveInfo时间戳的),比较BrokerLiveInfo的时间戳,如果过期关闭channel连接[url=]
[/url]
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0