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
相关文章
|
存储 弹性计算 NoSQL
阿里云服务器云盘类型怎么选?ESSD AutoPL、ESSD和ESSD Entry云盘区别及选择参考
云盘是阿里云为云服务器ECS提供的数据块级别的块存储产品,采用分布式三副本机制,为ECS实例提供99.9999999%的数据可靠性保证。目前阿里云服务器可选的云盘中,主要以ESSD AutoPL、ESSD和ESSD Entry云盘为主,有的用户并不清楚他们之间有什么区别,主要区别在于它们的目标应用场景、提供的性能级别以及成本效益比,本文就为大家介绍他们之间的区别及选择参考。
2100 15
|
存储 网络安全 数据处理
阿里云对象存储OSS计费模式按量付费和包年包月选择攻略
阿里云OSS对象存储计费模式分为按量付费和包年包月,默认开通OSS就是按量付费,购买资源包抵扣OSS费用的方式属于包年包月计费模式
3830 0
阿里云对象存储OSS计费模式按量付费和包年包月选择攻略
|
负载均衡 监控 Dubbo
秒懂Dubbo接口(原理篇)
【4月更文挑战第25天】秒懂Dubbo接口(原理篇)
1480 3
秒懂Dubbo接口(原理篇)
|
缓存 安全 前端开发
Cloudflare
【7月更文挑战第13天】Cloudflare
1053 5
|
Linux
Linux通过QQ邮箱账号使用mailx发送邮件
Linux通过QQ邮箱账号使用mailx发送邮件
854 2
|
数据采集 监控 架构师
主数据管理实施方案:规划与具体策略的全面解析
在当今数字化转型的浪潮中,主数据管理(MDM, Master Data Management)已成为企业提升数据质量、优化业务流程、增强决策能力的重要基石。一个成功的主数据管理实施方案不仅需要周密的规划,还需要具体可行的策略来确保项目顺利推进并达到预期效果。
1519 4
|
存储 容灾 API
云端问道19期方案教学-将本地冗余转换同城冗余,提升业务稳定性
本文介绍了阿里云对象存储OSS如何将本地冗余转换为同城冗余,以提升业务稳定性。内容分为五部分:背景介绍、存储冗余概述、创建同城冗余存储Bucket、转换Bucket的存储冗余类型及补充内容。重点讲解了本地冗余与同城冗余的区别、创建和转换同城冗余的具体操作步骤及注意事项。同城冗余能提供更高的数据持久性和服务可用性,确保业务连续性,且在转换过程中不会对业务产生影响。
695 0
|
弹性计算 Java Maven
阿里云云效操作报错合集之在构建Docker镜像时提示拉取次数达到限制,该怎么解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
消息中间件 存储 Kafka
2024最全Kafka集群方案汇总
Apache Kafka 是一个高吞吐量、可扩展、可靠的分布式消息系统,广泛应用于数据驱动的应用场景。Kafka 支持集群架构,具备高可用性和容错性。其核心组件包括 Broker(服务器实例)、Topic(消息分类)、Partition(有序消息序列)、Producer(消息发布者)和 Consumer(消息消费者)。每个分区有 Leader 和 Follower,确保数据冗余和高可用。Kafka 2.8+ 引入了不依赖 Zookeeper 的 KRaft 协议,进一步简化了集群管理。常见的集群部署方案包括单节点和多节点集群,后者适用于生产环境以确保高可用性。
1050 0
|
安全 应用服务中间件 网络安全
阿里云ssl证书简介和使用流程
了解如何在阿里云注册并实名账号,然后购买和部署SSL证书以增强网站安全性。阿里云SSL证书提供强大的加密、身份验证及SEO优势。通过简单流程购买适合的证书类型,如CFCA通配符OV证书,并在Nginx服务器上安装。遵循官方文档,下载证书,编辑Nginx配置并重启服务实现HTTPS。阿里云SSL证书是保障网站安全的高效解决方案。
1315 2
阿里云ssl证书简介和使用流程