RocketMQ-NameServer配置加载、启动源码分析

本文详细分析了RocketMQ NameServer的作用,包括Broker管理和路由信息管理。接着深入探讨了NameServer的启动过程,包括配置加载、NameServerController初始化、JVM钩子函数注册等关键步骤,以及NettyRemotingServer的初始化。此外,还提到了NameServer如何检测不活跃的Broker并定时输出配置信息。
摘要由CSDN通过智能技术生成

NameServer作用

在介绍NameServer前,先看下官方的RocketMQ架构图
在这里插入图片描述

NameServer是一个非常简单的Topic路由注册中心,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现。主要包括两个功能

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

NameServer通常也是集群的方式部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,Broker仍然可以向其它NameServer同步其路由信息,Producer,Consumer仍然可以动态感知Broker的路由的信息

NameServer实例时间互不通信,这本身也是其设计亮点之一,即允许不同NameServer之间数据不同步(像Zookeeper那样保证各节点数据强一致性会带来额外的性能消耗)

本文会从源码角度重点分析NameServer的启动流程

下篇文章会主要分析NameServer对broker数据的管理,以及路由机制

NameServer启动

先给出NameServer启动的时序图,方便大家跟踪流程
在这里插入图片描述

NameServer配置加载

时序图第一步加载配置文件对应源代码在org.apache.rocketmq.namesrv.NamesrvStartup#main0方法中
在这里插入图片描述

从NamesrvConfig,NettyServerConfig中加载配置文件代码在createNamesrvController方法中,看下具体实现
在这里插入图片描述

与配置相关的两个类为NamesrvConfig和NettyServerConfig

NamesrvConfig中属性如下

	//rocketmqHome路径
	private String rocketmqHome = S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值