前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【RocketMQ 5.0】How Namesrv Startup?

【RocketMQ 5.0】How Namesrv Startup?

作者头像
小伟
发布2022-12-14 14:24:01
3390
发布2022-12-14 14:24:01
举报
文章被收录于专栏:魔都程序缘魔都程序缘

在分享过RocketMQ Namesrv 5.0和4.9.x的差异后,本期分享Namesrv5.0是如何启动的。

一、代码架构和新增逻辑

在5.0.0中Namesrv和4.9.X的代码有一些变化, 主要包含

1. 添加Controller模块嵌入启动逻辑。

2. 添加ZoneRouteRPCHook。支持云特性:多zone部署和管理。

代码语言:javascript
复制
代码语言:javascript
复制
3.不同请求处理分类放在对应的Processor中。    a. ClientRequestProcessor:处理客户端请求, 目前包含获取路由信息
代码语言:javascript
复制
  b. ClientRequestProcessor:处理测试请求
代码语言:javascript
复制
  c. DefaultRequestProcessor:处理其余Namesrv的请求,
代码语言:javascript
复制
比如KV配置管理、Broker注册、Broker心跳、更新/查询Namesrv配置
代码语言:javascript
复制
等等。

二、 启动过程

在RocketMQ5.0.0中,Namesrv启动入口仍然是:

org.apache.rocketmq.namesrv.NamesrvStartup#main,

Namesrv启动时涉及到的启动参数如下图:

Namesrv启动需要的配置解释如下:

配置变量

含义

properties

临时存储全部的配置k-v,包含-c指定的启动文件和-p启动的变量

namesrvConfig

从properties中解析出来的全部namesrv配置

nettyServerConfig

从properties中解析出来的全部Controller和Namesrv RPC服务端启动配置。特别注意Controller的配置是clone出来的,和Namesrv使用的不是同一个对象。

nettyClientConfig

从properties中解析出来的全部Controller和Namesrv RPC客户端启动配置

controllerConfig

从properties中解析出来的全部Controller需要的启动配置

在main(String[] args)方法中,包含main0(args)和controllerManagerMain()两个方法, main0逻辑和4.9.X基本差不多,主要新增了controllerManagerMain()。

controllerManagerMain()方法主要是判断当前Namesrv是否配置允许内嵌启动一个Controller实例。

Namesrv配置中有一个特殊的配置项:enableControllerInNamesrv,默认false。若设置enableControllerInNamesrv=true,则Namesrv进程会启动一个Namesrv服务和Controller服务。

我们可以看到createAndStartControllerManager()方法调用了createControllerManager()和start()两个方法, 这2个方法都是直接调用Controller模块中的方法, 具体逻辑我们放到Controller那篇继续讲。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 魔都程序缘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档