1. 程式人生 > 其它 >Rocketmq 總結 (一) -- NameServer

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不會主動通知生產者或 消費者。而是靠客戶端主動拉取。