rocketmq(一)— namesrv

207 阅读1分钟

1、rocketmq的组件架构

image.png

2、namesrv基本作用

NameServer是一个简单的 Topic 路由注册中心,支持 Topic、Broker 的动态注册与发现。

  • Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;
  • 路由信息管理,每个NameServer将保存关于 Broker 集群的整个路由信息和用于客户端查询的队列信息。Producer和Consumer通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。

3、namesrv的启动流程

3.1、启动流程

ROCKETMQ_HOME=D:\java study\rocketmq\distribution

image.png

出现以下则启动成功:

The Name Server boot success. serializeType=JSON

image.png

public static NamesrvController main0(String[] args) { 
try { 
NamesrvController controller = createNamesrvController(args);
start(controller); 
String tip = "The Name Server boot success. serializeType=" + RemotingCommand.getSerializeTypeConfigInThisServer();
log.info(tip); 
System.out.printf("%s%n", tip); return controller; 
}
catch (Throwable e) {
e.printStackTrace(); System.exit(-1); 
} 
return null;
}

上述代码比较简单:

  • 创建NameServer中的内置对象
  • 启动NameServier, 其实就是启动一个netty server,接受netty client的请求

4、核心类图分析

4.1

image.png

5. 核心代码分析

通过上述分析,其实namesrv最重要的功能就是管理broker的列表,也就是broker的增删查改。(听起来还挺简单的)

在分析代码之前,我心中有几个问题:

  • broker列表是维护在哪里的呢?有无持久化的存储引擎?
  • 维护broker的数据结构长什么样?我们自己来设计如何设计?
  • namesrv中的broker假如已经下线了,但client已经拉到了下线的broker,应该如何处理呢?消息会发送/读取失败么?

5.1broker的管理(增删改查)