zoukankan      html  css  js  c++  java
  • 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才能发现。

  • 相关阅读:
    Shell 批量搜索关键词并保存结果到文件中(数组、循环)
    解决tensorflow的Session Exception问题
    解决h5py的FutureWarning问题
    【转】Ubuntu16.04安装WPS
    [Linux] 随机切分文件内容
    [Python] 动态函数调用(通过函数名)
    [Python] dict字典的浅复制与深复制
    基于sklearn进行文本向量化
    Asp.Net MVC SingleServiceResolver类剖析
    Asp.Net MVC 高级特性(附带源码剖析)
  • 原文地址:https://www.cnblogs.com/juniorMa/p/14934263.html
Copyright © 2011-2022 走看看