说明
该类记录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集群图示如下
属性
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<Long/* brokerId */, String/* broker address */> 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<String> addrs = new ArrayList<String>(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 集群图示