RocketMQ探索-namesrv
- Namesrv:无状态,可集群部署,横向扩展
- 每一个broker(包括master和slave)在启动的时候向namesrv注册本身
- Producer发送消息的时候根据topic从namesrv中获取路由到broker的信息(根据namesrv的注册信息)
- Consumer根据topic到namesrv获取topic的路由到broker的信息
Namesrv流程图:jvm

namesrv启动时作了哪些事情:函数
- 加载Netty的server的配置项(NettyServerConfig),namesrv使用Netty与其余模块进行通讯,好比和broker模块进行通讯。
- 设置监听端口:9876
- 初始化服务控制对象NamesrvController。NamesrvController实例中包含:namesrvConfig(namesrv相关配置),nettyServerConfig(netty的相关配置),KVConfigManager(KV配置管理),RouteInfoManager(路由信息、topic信息管理),BrokerHousekeepingService(broker管理服务)
- NamesrvController.initialize():加载KV配置;初始化通讯层(Netty的初始化:remotingServer对象);初始化线程池(remotingExecutor);定义RequestCode用来做为netty的通讯协议字段(registerProcessor():向remotingServer对象中注册DefaultRequestProcessor(namesrv中处理请求的类)对象);启动定时扫描notActive的broker任务;启动定时将configTable相关信息记录到日志文件中任务
- 设置一个jvm退出勾子函数,即jvm退出时,此处线程调用controller.shutdown(),清理controller相关资源
欢迎关注本站公众号,获取更多信息