NameServer 启动步骤一|学习笔记

简介: 快速学习 NameServer 启动步骤一

开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段)NameServer 启动步骤一】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/704/detail/12461


NameServer 启动步骤一

 

启动流程

NameServer的启动流程主要分为三步,第一步创建NameServerController,第二步进行NameServerController实例化,第三步在退出时完成释放资源操作。

步骤一:

解析配置文件,填充NameServerConfig、NettyServerConfig属性值,并创建NamesrvControllerI

NameServerController是介绍、响应、请求的核心类

下图为原码流程图:

image.png

首先,在NamesrvStartup中会有main方法,main方法会调用main0,mian0当中会执行NameServerController创建工作。createNameServer操作最终是以返回controller结束 ,controller的创建需要用到两个配置类,一个是nameserverConfig,一个是nettyserverConfig,这两个配置类,一个是NameServer的属性配置,一个是nettyServer的属性配置。

final Namesrvconfig namesrvconfig = new Namesrvconfig();

final NettyServerconfig nettyServerconfig = new NettyServerconfig();

这两行代码是nameserverConfig和nettyserverConfig配置类

nameserverConfig中的配置信息:

private string rocketmqHome=System.getProperty(NixAll.ROCKETNQ_HOME_PROPERTY,System.getenv(NixAll.ROCKETNg_HOME_ENV));

private string kevConfigPath = System.get?riperty("user .home")+ File.separator + "namesr"+ File.separator + "kvConfig.json";

private string configstorePath = system.getproperty("user .home")+ File.separator + "namesrv" + File.separator + "namesrv.propertiv

private string productEnvName = "center";

private boolean clusterTest = false;

private boolean orderMessageEnable = false;

第一个属性配置是rocketmqHome,加载环境变量,获取rocketmq原码的根路径;第二个属性配置是kevConfigPath,默认在个人home里指定目录;

rocketmqHome: rocketmq主目录

kvConfig: NamjeServer存储KV配置属性的持久化路径

configStorePath: nameServer默认配置文件路径

orderMessageEnable:是否支持顺序消息

NettyServer是请求、响应的服务端。

nettyserverConfig配置信息:

private int listenPort = 8888;

private int serverworkerThreads = 8;

private int serverca11backExecutorThreads = 0;

private int serverselectorThreads = 3;

private int serveronewaysemaphorevalue = 256;

private int serverAsyncsemaphorevalue = 64;

private int serverchanne1MaxIdleTiheseconds = 120;

private int serversocketsndBufsize = Nettysystemconfig.socketsndbufsize;

private int serversocketRcvBufsize = Nettysystemconfig.socketRcvbufsize;

private boolean serverpooledByteBufA11ocatorEnab1e = true;

private boolean useEpo11Nativeselector = fa1se;

listenPort: NameServer监听端口,该值默认会被初始化为9876

serverWorkerThreads: Netty业务线程池线程个数

serverCallbackExecutorThreads: Netty public任务线程池线程个数,Netty网络设计,根据业务类型会创建不同的线程池,比如处理消息发送、消息消费、心跳检测等。如果该业务类型未注册线程池,则由public线程池执行。

serverSelectorThreads: lO线程池个数,主要是NameServer、Broker端解析请求、返回相应的线程个数,这类线程主要是处理网路请求的,解析请求包,然后转发到各个业务线程池完成具体的操作,然后将结果返回给调用方;

serverOnewaySemaphoreValue: send oneway消息请求并发读(Broker端参数);

serverAsyncSemaphoreValue:异步消息发送最大并发度;

serverChannelMaxldleTimeSeconds :网络连接最大的空闲时间,默认120s。

serverSocketSndBufSize:网络socket发送缓冲区大小。

serverSocketRcvBufSize:网络接收端缓存区大小。

serverPooledByteBufAllocatorEnable: ByteBuffer是否开启缓存;

useEpollNativeselector:是否启用Epoll IO模型。

刚刚分析了配置类中的一些属性,下面讲述属性值是如何来的:

nettyServerConfig.setListenPort(9876);

nettyServerConfig默认端口号为9876

if ( commandLine.hasoption( "c')) { //指定属性配置文件位置

string file = commandLine.getoptionvalue( 'c");

if (file != null) {

Inputstream in = new BufferedInputstream(rew FileInputstream(file));

properties = new Properties();

properties.load(in);

MixAll.properties20bject(properties, namesrvconfig);

MixAll.properties2object(properties,nettyserverconfig);

namesrvconfig.setconfigstorePath(file);

system.out.printf("1oad config properties file oK,%s%n", file);

in.close();

}

}

if ( commandLine.hasoption( 'p’) { //属性名=属性值

InternalLogger console = InternalLoggerFactory.getLogger(LoggerName .NANIESRV_CONSOLE_NANIE);

MixAll.printobjectProperties(console,namesrvConfig);

MixAll.printobjectProperties(console,nettyServerConfig);

system.exit( status: e);

}

一个是解析命令行中-c参数,另一个if是解析命令行中-p参数

-c参数指,指定属性值时,可以通过一个属性配置文件去指定,在-c后面写上属性配置文件的路径,之后会读取属性配置文件并将其加载到properties中,然后会用properties对象填充namesrvconfig和nettyserverconfig。

除了-c方式还可以通过-p方式指定,就是在-p后面直接写属性值,亚同样会解析到namesrvconfig和nettyserverconfig中。

也可以通过控制台指定,它也可以进行处理并封装到namesrvconfig当中。

final NamesrvController controller = new NamesrvController(nameprvconfig,nettyServerconfig);

这行代码是在进行namesrvController的创建,是通过namesrvConfig的构造参数完成对象的创建

public NamesrvController(NamesnyConfig namesrvConfig,NettyServerConfig nettyServerConfig){

this.namesrvconfig = namesrvConfig;

this.nettyserverConfig = nettyserverconfig;

this.kvConfigMagager=newKVConfigManager( namesrvController. this);

this.routeInfoMainager = new RouteInfoManager();

this.brokerHousekeepingService=newBrokerHousekeepingService( namesrvController.this);

this.configuration = new Configuration(

Log,

this.namesrvConfig, this.nettyserverconfig

);this.configuration.setStorePathFromConfig(this.namesrvConfig,fieldName:, "configStorePath");

}

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
11月前
|
消息中间件 存储 SQL
代码很少,却很优秀!RocketMQ的NameServer做到了!
本文深入剖析了RocketMQ的注册中心NameServer,基于RocketMQ release-5.2.0版本。NameServer作为Broker、Producer与Consumer之间的纽带,仅由少数几个类构成,却实现了高性能与轻量化。文章详细介绍了NameServer的AP设计思想、简洁的数据结构及心跳机制。AP设计避免了复杂的分布式协议,简化了网络开销;数据结构主要包括路由表、Broker信息等;心跳机制则通过定时扫描确保Broker的活跃状态。通过这些核心设计,NameServer实现了高效稳定的注册与发现功能。
492 5
|
4月前
|
存储 SQL 关系型数据库
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
|
11月前
|
消息中间件 监控 Java
开发者如何使用云消息队列 RocketMQ 版
【10月更文挑战第12天】开发者如何使用云消息队列 RocketMQ 版
1432 94
|
IDE Android开发 iOS开发
Android VS iOS:哪个操作系统更适合开发者?**
**在移动应用开发领域,Android和iOS是两大主流操作系统,它们各自拥有独特的特点和优势。本文探讨了Android和iOS操作系统在开发者视角下的差异与优劣,分析了它们在开发环境、用户群体、市场前景等方面的比较,帮助开发者选择最适合他们需求的平台。
290 29
|
11月前
|
消息中间件 存储 Java
一览纵山小,原来RocketMQ是这样工作的!
本文介绍了阿里巴巴开源的高性能分布式消息队列系统RocketMQ的核心组件及其作用。RocketMQ拥有四个关键组件:NameServer、Broker、Producer和Consumer。NameServer作为注册中心维护路由信息;Broker负责消息的接收、存储和转发;Producer生成消息并通过Topic与Broker关联;Consumer则订阅并处理消息。文章详细解析了各组件的功能及交互逻辑,并展示了RocketMQ在异步通信、日志收集、流处理及事件驱动架构中的典型应用场景。通过整体框架的梳理,有助于读者更好地理解和掌握RocketMQ的工作机制。
163 4
ly~
|
12月前
|
消息中间件 搜索推荐 大数据
一般情况下在 RocketMQ 中添加 access key 的步骤: 一、确定配置文件位置 RocketMQ 的配置文件通常位于安装目录下的 conf 文件夹中。你需要找到 broker.conf 或相关的配置文件。 二、编辑配置文件 打开配置文件,查找与 ACL(访问控制列表)相关的配置部分。 在配置文件中添加以下内容:
大数据广泛应用于商业、金融、医疗和政府等多个领域。在商业上,它支持精准营销、客户细分及流失预测,并优化供应链管理;金融领域则利用大数据进行风险评估、市场预测及欺诈检测;医疗行业通过大数据预测疾病、提供个性化治疗;政府运用大数据进行城市规划和公共安全管理;工业领域则借助大数据进行设备维护、故障预测及质量控制。
ly~
764 2
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
114105 0
|
机器学习/深度学习 数据采集 算法
Python实现GWO智能灰狼优化算法优化支持向量机回归模型(svr算法)项目实战
Python实现GWO智能灰狼优化算法优化支持向量机回归模型(svr算法)项目实战
|
消息中间件 弹性计算 运维
对比阿里云的SofaMQ与RocketMQ
对比阿里云的SofaMQ与RocketMQ
2053 2
uniapp中组件库的Checkbox 复选框的使用方法
uniapp中组件库的Checkbox 复选框的使用方法