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
相关文章
|
10月前
|
存储 弹性计算 NoSQL
阿里云服务器云盘类型怎么选?ESSD AutoPL、ESSD和ESSD Entry云盘区别及选择参考
云盘是阿里云为云服务器ECS提供的数据块级别的块存储产品,采用分布式三副本机制,为ECS实例提供99.9999999%的数据可靠性保证。目前阿里云服务器可选的云盘中,主要以ESSD AutoPL、ESSD和ESSD Entry云盘为主,有的用户并不清楚他们之间有什么区别,主要区别在于它们的目标应用场景、提供的性能级别以及成本效益比,本文就为大家介绍他们之间的区别及选择参考。
1605 15
|
消息中间件 存储 SQL
代码很少,却很优秀!RocketMQ的NameServer做到了!
本文深入剖析了RocketMQ的注册中心NameServer,基于RocketMQ release-5.2.0版本。NameServer作为Broker、Producer与Consumer之间的纽带,仅由少数几个类构成,却实现了高性能与轻量化。文章详细介绍了NameServer的AP设计思想、简洁的数据结构及心跳机制。AP设计避免了复杂的分布式协议,简化了网络开销;数据结构主要包括路由表、Broker信息等;心跳机制则通过定时扫描确保Broker的活跃状态。通过这些核心设计,NameServer实现了高效稳定的注册与发现功能。
532 5
|
存储 网络安全 数据处理
阿里云对象存储OSS计费模式按量付费和包年包月选择攻略
阿里云OSS对象存储计费模式分为按量付费和包年包月,默认开通OSS就是按量付费,购买资源包抵扣OSS费用的方式属于包年包月计费模式
3489 0
阿里云对象存储OSS计费模式按量付费和包年包月选择攻略
|
6月前
|
存储 弹性计算 资源调度
阿里云服务器收费模式对比:包年包月与按量付费的适用场景与选择参考
在我们购买阿里云服务器的时候,云服务器的收费模式主要有多种收费模式,其中包年包月和按量付费两种主流模式。对于准备在阿里云上部署应用的用户来说,选择合适的收费模式至关重要,因为它直接关系到成本控制和资源使用的灵活性。本文将对这两种收费模式做一个对比,以供参考和选择。
939 14
|
12月前
|
消息中间件 监控 Java
开发者如何使用云消息队列 RocketMQ 版
【10月更文挑战第12天】开发者如何使用云消息队列 RocketMQ 版
1509 111
|
负载均衡 监控 Dubbo
秒懂Dubbo接口(原理篇)
【4月更文挑战第25天】秒懂Dubbo接口(原理篇)
952 3
秒懂Dubbo接口(原理篇)
ly~
|
消息中间件 搜索推荐 大数据
一般情况下在 RocketMQ 中添加 access key 的步骤: 一、确定配置文件位置 RocketMQ 的配置文件通常位于安装目录下的 conf 文件夹中。你需要找到 broker.conf 或相关的配置文件。 二、编辑配置文件 打开配置文件,查找与 ACL(访问控制列表)相关的配置部分。 在配置文件中添加以下内容:
大数据广泛应用于商业、金融、医疗和政府等多个领域。在商业上,它支持精准营销、客户细分及流失预测,并优化供应链管理;金融领域则利用大数据进行风险评估、市场预测及欺诈检测;医疗行业通过大数据预测疾病、提供个性化治疗;政府运用大数据进行城市规划和公共安全管理;工业领域则借助大数据进行设备维护、故障预测及质量控制。
ly~
822 2
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
120998 0
|
缓存 安全 前端开发
Cloudflare
【7月更文挑战第13天】Cloudflare
602 5
|
消息中间件 弹性计算 运维
对比阿里云的SofaMQ与RocketMQ
对比阿里云的SofaMQ与RocketMQ
2163 2