zoukankan      html  css  js  c++  java
  • 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类的管理

    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连接

     

  • 相关阅读:
    Tensorflow实战系列之三:
    Tensorflow实战系列之二:
    scala映射和元组
    scala函数
    scala基础
    Hadoop Eclipse 插件制作以及安装
    理解HBase
    理解HDFS
    Hadoop入门学习路线
    日志框架Log4j
  • 原文地址:https://www.cnblogs.com/wxd0108/p/6055108.html
Copyright © 2011-2022 走看看