Rocketmq 总结 (一) -- NameServer

一 概述

  NameServer的主要作用是,

  1 路由功能。生产者查询NameServer,根据Topic选择它要发送的MessageQueue。

  2 通过和每个broker发送心跳,更新注册信息,剔除失效broker

二 主要成员变量

  

public class RouteInfoManager {
    private static final InternalLogger log = InternalLoggerFactory.getLogger(LoggerName.NAMESRV_LOGGER_NAME);
    private final static long BROKER_CHANNEL_EXPIRED_TIME = 1000 * 60 * 2;
    private final ReadWriteLock lock = new ReentrantReadWriteLock();
    private final HashMap<String/* topic */, List<QueueData>> topicQueueTable;
    private final HashMap<String/* brokerName */, BrokerData> brokerAddrTable;
    private final HashMap<String/* clusterName */, Set<String/* brokerName */>> clusterAddrTable;
    private final HashMap<String/* brokerAddr */, BrokerLiveInfo> brokerLiveTable;
    private final HashMap<String/* brokerAddr */, List<String>/* Filter Server */> filterServerTable;

  其实就是一个个的map保存着broker的信息。

  

 

  topicQueueTable只是保存着broker的名字,而具体的ip信息在 brokerAddrTable 里。

  brokerLiveTable是定时向broker发送心跳包,然后收到心跳包之后更新时间戳。

  

 

  过程如下,broker启动的时候向所有NameServer发送心跳,然后每隔30s向所有NameServer发送心跳包。NameServer收到Broker心跳包时会更新brokerLiveTable缓存中BrokerLiveInfo的lastUpdateTimeStamp,然后NameServer会每隔10s扫描brokerLiveTable,如果连续120s没有收到心跳包,NameServer将移除该Broker的路由信息同时关闭Socket链接。

三 路由发现

  如果发生了broker上线或者下线,NameServer不会主动通知生产者或 消费者。而是靠客户端主动拉取。

  拉取的时间默认是30s。所以如果有broker下线,客户端最快也得30s才能发现。

 

posted on 2021-06-26 14:57  MaXianZhe  阅读(196)  评论(0编辑  收藏  举报

导航