1 概念
Namesrv的主要功能是临时存储,管理Topic路由信息,各个Namesrv节点之间是不通信,无状态的,互相不知道对方的存在。
当Broker,生产者,消费者启动的时候,会轮询全部的Namesrv节点,获取路由信息。
2 核心数据结构和API
2.1 Namesrv的核心数据结构
Namesrv中保存的信息是Topic的路由信息,Topic的路由决定了Topic的信息发送给哪些Broker,或者从哪些Broker获取消息。
路由数据结构的实现代码都在org.apache.rocketmq.namesrv.routeinfo.RouteInfoManager
中
public class RouteInfoManager {
private static final InternalLogger log = InternalLoggerFactory.getLogger(LoggerName.NAMESRV_LOGGER_NAME);
//Broker存活的时间周期,默认120秒
private final static long DEFAULT_BROKER_CHANNEL_EXPIRED_TIME = 1000 * 60 * 2;
private final ReadWriteLock lock = new ReentrantReadWriteLock();
//保存Topic和队列的路由信息
private final Map<String/* topic */, Map<String, QueueData>> topicQueue