common模块阅读1:BrokerData

说明

该类记录Broker信息

Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId
为0表示Master,非0表示Slave。Master也可以部署多个。每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name Server (参照refer)

broker集群图示如下


common模块阅读1:BrokerData_第1张图片
broker集群图示

属性

    private String cluster;//所属集群
    private String brokerName;//名称

    /**
     * 同一个Broker下可以分为master和slave,一个master,多个slave
     * brokerId为0代表master 参照MixAll.MASTER_ID
     * 其他brokerId为slave
     * 同一个brokerName下可以有一个Master和多个Slave,所以brokerAddrs是一个集合
     */
    private HashMap brokerAddrs;

    private final Random random = new Random();//在选择一个broker进行连接的时候起作用

方法

基本都是set,get和Object方法,这里只讲selectBrokerAddr方法

    /**
     * Selects a (preferably master) broker address from the registered list.
     * If the master's address cannot be found, a slave broker address is selected in a random manner.
     *
     * @return Broker address.
     */
    public String selectBrokerAddr() {
        String addr = this.brokerAddrs.get(MixAll.MASTER_ID);

        if (addr == null) {
            List addrs = new ArrayList(brokerAddrs.values());
            return addrs.get(random.nextInt(addrs.size()));
        }

        return addr;
    }

意思就是

选择一个broker地址,有master就选master的地址
否则随机选一个slave的地址

思考

关于brokerAddrs表的存在的意义,为什么brokerName一样,还会有一个表来记录

见说明,以及图示

问题

refer中提到的: 每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name Server。

这在代码是在哪里体现的,暂时还不知道

refer

http://bboyjing.github.io/2017/04/21/RocketMQ%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E4%B9%8B%E3%80%90rocketmq-namesrv%E3%80%91/
《RocketMQ开发手册3.2.4.pdf》 5.2节 RocketMQ物理部署结构
http://blog.csdn.net/a417930422/article/details/52585414 集群图示

你可能感兴趣的:(common模块阅读1:BrokerData)