首页 > 其他 > 详细

Rocketmq 总结 (一) -- NameServer

时间:2021-06-26 16:44:41      阅读:20      评论:0      收藏:0      [点我收藏+]

一 概述

  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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!