RocketMQ--nameServer启动流程

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

RocketMQ--nameServer启动流程_第1张图片

点击进入createNamesevController(arg)方法。

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

     #NamServerConfig

RocketMQ--nameServer启动流程_第2张图片

#NettyServerConfig

RocketMQ--nameServer启动流程_第3张图片

 

 

             2. 加载log配置

             3. 创建NameServerController

RocketMQ--nameServer启动流程_第4张图片

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

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

RocketMQ--nameServer启动流程_第5张图片

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

   1、剔除失效的broker

RocketMQ--nameServer启动流程_第6张图片

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

   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 心跳包,多个心跳
包请求串行执行。这也是读写锁经典使用场景。

 

你可能感兴趣的:(rocketMQ,java-ee)