RocketMQ--nameServer启动流程

一、创建NameServerController,NameServerController为nameserver的核心控制器

点击进入createNamesevController(arg)方法。

  1.  创建NameServerConfig和NettyServerConfig,把配置文件中或者启动命令中的选项值填充到这两个配置对象中

     #NamServerConfig

#NettyServerConfig

 

 

             2. 加载log配置

             3. 创建NameServerController

创建网络处理连接池、开启扫描判断brocker存活状态的定时任务、开启打印kv 的定时任务。

二、Broker的路由信息的管理----RouteInfoManager

一个Topic 拥有多个消息队列,一个Broker 为每一主题默认创建4 个读队列4 个写队列。多个Broker 组成一个集群, BrokerName 由相同的多台Broker组成Master-Slave 架构, brokerId 为0 代表Master , 大于0 表示Slave 。BrokerLivelnfo 中的lastUpdateTimestamp 存储上次收到Broker 心跳包的时间。 

   1、剔除失效的broker

查询最后的心跳时间,如果两分钟没有更新,则剔除服务

   2、路由注册

  Broker在启动的时候会注册一次,并且会启动定时任务定时发送心跳信息。发送的注册请求会被NameServer处理,最终是通过RouteInfoManager的registerBroker(params...)进行处理

会更新brokerAddrTable和更新brokerLiveTable中最后一次心跳的时间。如果Broker 为Master ,并且Broker Topic 配置信息发生变化或者是初次注册,则需要创建或更新Topic 路由元数据,填充topicQueueTable

设计亮点: Name Serve 与Broker 保持长连接, Broker 状态存储在brokerLiveTable 中,
NameS erver 每收到一个心跳包,将更新brokerL iveTa ble 中关于Broker 的状态信息以及路
由表( topicQueueTable 、brokerAddrTab le 、brokerLiveTable 、fi lterServerTable ) 。更新上述路由表( HashTable )使用了锁粒度较少的读写锁,允许多个消息发送者(P roducer )并发读,保证消息发送时的高并发。但同一时刻NameServer 只处理一个Broker 心跳包,多个心跳
包请求串行执行。这也是读写锁经典使用场景。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值