rocketMQ nameSrv原理解析

RocketMQ的NameSrv作为注册中心,类似于Zookeeper在Dubbo中的角色,负责存储Broker和Client的注册信息。在启动时,Broker和Client会连接NameSrv获取数据。NameSrv通过NamesrvController进行初始化,包括配置信息、通信层和线程池。在分布式环境下,NameSrv通过Processor实现主从和单机的不同处理策略,当本地获取信息失败时,会尝试从其他NameSrv获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rocketMQ nameSrv(RocketMQ的注册中心)

RocketMQ的注册中心nameSrv在rocketMQ中相当于zookeeper在dubbo中的作用,是用来存储broke和client的注册信息的。
broke和clicent在启动的时候都会去连接nameSrv获取信息,下面介绍一下nameSrv的运行机制
这里写图片描述
nameSrv启动时入口NamesrvStartup会实例化NamesrvController,然后调用其initialize()方法。
NamesrvController使nameSrv的核心类,他有如下操作:

  • 初始化配置信息 KVConfigManager、NettyServerConfig
private String kvConfigPath = System.getProperty("user.home") + File.separator + "namesrv" + File.separator + "kvConfig.json";
    private String configStorePath = System.getProperty("user.home") + File.separator + "namesrv" + File.separator + "namesrv.properties";
  • 初始化通信层
  • 初始化线程池
    **

nameSrv分布式实现

**
在分布式主从和单机情况下使用不同的Processor

if (namesrvConfig.isClusterTest()) {
this.remotingServer.registerDefaultProcessor(new ClusterTestRequestProcessor(this, namesrvConfig.getProductEnvName()),
                this.remotingExecutor);
        } else {
this.remotingServer.registerDefaultProcessor(new DefaultRequestProcessor(this), this.remotingExecutor);
        }

ClusterTestRequestProcessor继承DefaultRequestProcessor,仅重写了
getRouteInfoByTopic()方法。
在重写的方法中仅加入了一行代码

topicRouteData = adminExt.examineTopicRouteInfo(requestHeader.getTopic());

就是在本机上获取不到topic的信息会尝试去其他的namesvr上获取。
跟入代码会发现最终是调用了NettyRemotingClient.invokeSync(),
NettyRemotingClient中的namesrvAddrList 存储着所有的namesrv的地址

private final AtomicReference<List<String>> namesrvAddrList = new AtomicReference<List<String>>();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值