文章目录
上篇文章里提到,NameServer在Mq架构中充当一个路由中心的角色,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现。主要包括两个功能
- Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;
- 路由信息管理,每个NameServer将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息。然后Producer和Conumser通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费
RouteInfoManager
NameServer对Broker信息的管理,对路由信息的管理,都在RouteInfoManager类中实现。
先看下RouteInfoManager中的存储的路由数据及结构
// Broker信息过期失效时间(120秒),若 上次心跳时间+BROKER_CHANNEL_EXPIRED_TIME>当前时间,则判断Broker失效
private final static long BROKER_CHANNEL_EXPIRED_TIME = 1000 * 60 * 2;
// 读写锁,控制下列各个Map在并发读写下的安全性
private final ReadWriteLock lock = new ReentrantReadWriteLock();
// topic对应队列信息
private final HashMap<String/* topic */, List<QueueData>> topicQueueTable;
// broker信息
private final HashMap<String/* brokerName */, BrokerData> brokerAddrTable;
// broker集群信息,key-集群名称 value-对应集群中所有broker名称
private final HashMap<String/* clusterName */, Set<String/* brokerName */>> clusterAddrTable;
// broker地址及对应对应broker存活信息
private final HashMap<String/* brokerAddr */, BrokerLiveInfo> brokerLiveTable;
// broker地址及对应Filter Server列表
private final HashMap<String/* brokerAddr */, List<String>/* Filter Server */> filterServerTable;
再看下QueueData、BrokerData、BrokerLiveInfo中属性
QueueData:
//brokerName
privat