码迷,mamicode.com
首页 > 其他好文 > 详细

Rocketmq 总结 (一) -- NameServer

时间:2021-06-28 18:43:42      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:top   lis   idt   filter   启动   技术   width   intern   nal   

一 概述

  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不会主动通知生产者或 消费者。而是靠客户端主动拉取。

  

 

Rocketmq 总结 (一) -- NameServer

标签:top   lis   idt   filter   启动   技术   width   intern   nal   

原文地址:https://www.cnblogs.com/juniorMa/p/14934263.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!