RocketMQ源码学习笔记:NameServer启动流程

这是本人学习的总结,主要学习资料如下

  • 马士兵教育
  • rocketMq官方文档

目录

  • 1、Overview
  • 2、NameServer启动流程
    • 2.1、总结
    • 2.2、NamesrvController
      • 2.2.1、主要职责
      • 2.2.2、关键的成员变量
      • 2.2.3、核心代码
      • 2.2.4、值得注意的点


1、Overview

NameServer主要就做三件事

  • NameServer启动:启动监听,等待Broker,Prod ucer,Consumer连接注册。
  • 路由注册:Borker启动后向所有NameServer发送路由和心跳信息。
  • 路由剔除:移除心跳超时的Broker相关路由信息。

源码学习也是针对核心功能看RocketMQ如何实现这三个功能。

这是RocketMQ的整体流程图。

图中的NRCNetty Remoting Client的缩写。可以看出RocketMQ是基于Netty实现网络通信。
在这里插入图片描述


2、NameServer启动流程

2.1、总结

入口是NamesrvStartup的psvm方法。

前面做完必要的参数处理之后,会创建一个NamesrvController的实例,由他负责初始化的工作,比如加载key-value配置,定时任务等。

所以源码分析的重点会放在NamesrvController的构建以及它的initialize()方法。
在这里插入图片描述

2.2、NamesrvController

2.2.1、主要职责

负责加载KV配置,构建NRS通讯实例,构建定时任务

这意味着它的成员变量会有一些集合,比如HashMap,用来存放各种各样的key-value配置。

同时会有NettyRemotingServer的实例代表着构建好的通讯实例。

还会有一些线程池用于定时任务。


2.2.2、关键的成员变量

NamesrvController中的重要成员变量对应着它的职责。

KVConfigManager对应着加载key-value配置。

RemotingServer负责网络请求。

RouteInfoManager则是负责路由管理。路由管理是指管理broker注册的路由信息。与路由相关的动作与信息都在这个变量中。它对于读写锁的运用也值得学习。

2.2.3、核心代码

NamesrcController相关代码需要从这两条线看。

  • main() -> main0() -> createNamesrcController()
    这个主要是实例化NamesrcController。当然在实例化之前会做一些检查,检查的代码较长,但最核心的就只有一句new NamesrvController(namesrvConfig, nettyServerConfig);。主要是将一些来自外部的配置信息注入到NamesrcController的成员变量中,为接下来的初始化做准备。

在这里插入图片描述

  • main() -> main0() -> start() -> controller.initialize()
    initialize()方法是最关键的,因为涉及到线程池的设置,NameServer的一些关键行为比如心跳检查,不活跃剔除的具体信息就可以在这里找到。看下图我们可以知道,移除不活跃的broker的定时认识是每10s一次,写死的值不可更改。

在这里插入图片描述


2.2.4、值得注意的点

  1. createNamesrvController()方法中,需要构建一个NettyServerConfig实例用来配置网络通信,其中包括NameServer监听的端口号。在源码中端口号被写死成9876,完全无法通过任何配置修改,nettyServerConfig.setListenPort(9876);。所以实际使用中想要修改NameServer监听的端口号就只能下载源码来改装。

  2. createNamesrvController()方法中,有一段分支会结束当前进程并答应所有配置信息,可以用来debug。在if (commandLine.hasOption('p')){}中,意味着我们只要在启动参数中配置一个-p就可以打印所有配置项。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/29226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3的基本使用方法

【 vue3实例 】 【 0 】对象、方法和属性 对象(Object): 对象是编程中的一个数据结构,它可以包含多种数据类型,包括数字、字符串、布尔值、数组、其他对象等。对象通常由一系列属性和方法组成。在面向对象编程&…

超高清图像生成新SOTA!清华唐杰教授团队提出Inf-DiT:生成4096图像比UNet节省5倍内存。

清华大学唐杰教授团队最近在生成超高清图像方面的新工作:Inf-DiT,通过提出一种单向块注意力机制,能够在推理过程中自适应调整内存开销并处理全局依赖关系。基于此模块,该模型采用了 DiT 结构进行上采样,并开发了一种能…

高考专业抉择计算机专业热度不减,兴趣、实力与挑战并存。

作为一名即将步入大学校门的高考生,我对于计算机相关专业是否仍是热门选择感到困惑。在过去几年里,计算机科学与技术、人工智能、网络安全、软件工程等专业一直备受追捧,吸引了无数学生。然而,随着市场竞争加剧和市场饱和度提高&a…

一种革命性的速度检测算法

YOLO:一种革命性的速度检测算法 一、引言 在当今的计算机视觉领域,目标检测是一个至关重要的研究方向。传统的目标检测方法,如滑动窗口和区域建议网络(Region Proposal Network, RPN),虽然取得了一定的成…

【Linux】进程_8

文章目录 五、进程10. 进程等待阻塞等待和非阻塞等待 11. 进程程序替换 未完待续 五、进程 10. 进程等待 上一篇我们知道了 wait 和 waitpid 函数都有一个 status 参数,这个参数是什么呢?这个参数其实就是进程的返回结果,当子进程结束的时候…

MySQL-----JOIN语句之内连接

在我们使用MySQL进行项目的开发过程中,仅仅对一张表进行操作是远远不够的,真正的应用中经常需要从多个数据表中读取数据。我们在使用的过程中,尝尝通过 SELECT, UPDATE 和 DELETE 语句配合使用 JOIN 来联合多表查询。 JOIN 分类 INNER JOIN…

adversarially有这个单词吗

“Adversarially” 是一个存在的单词,尤其在机器学习和计算机安全领域中常用。它的词根是“adversarial”,表示对抗的、敌对的。因此,“adversarially”意为“以对抗性方式”。 词义和用法 Adversarial: 形容词,表示对抗的&…

鸿蒙开发电话服务:【@ohos.telephony.data (蜂窝数据)】

蜂窝数据 说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import data from ohos.telephony.data;data.getDefaultCellularDataSlotId getDefaultCellularDataSlotId(callback: Async…

【5.x】ELK日志分析、集群部署

ELK日志分析 一、ELK概述 1、ELK简介 ELK平台是一套完整的日志集中处理解决方案,将ElasticSearch、Logstash和Kiabana三个开源工具配合使用,完成更强大的用户对日志的查询、排序、统计需求。 一个完整的集中式日志系统,需要包含以下几个主…

中国星网时空信息集团春招Offer面经

本文介绍2024届春招中,中国卫星网络集团有限公司下属中国时空信息集团有限公司中,业务助理岗位1场面试的基本情况、提问问题等。 2024年04月投递了中国卫星网络集团有限公司下属中国时空信息集团有限公司中的业务助理岗位,所属部门为运营中心…

基于jeecgboot-vue3的Flowable流程-所有任务

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 这个部分主要讲所有任务的功能 1、主要列表界面如下&#xff1a; <template><div class"p-2"><!--查询区域--><div class"jeecg-basic-table-form-…

艾伦脑图谱(Allen Brain Atlas)

文章目录 一、艾伦研究所&#xff08;Allen Institute&#xff09;1.1、艾伦脑图谱&#xff08;Allen Brain Map&#xff09;1.1.1、艾伦&#xff08;小鼠大脑&#xff09;通用坐标框架&#xff08;Allen Mouse Brain Common Coordinate Framework&#xff0c;CCFv3&#xff09…

Elasticsearch-使用Logstash同步Mysql

1.安装logstash es服务器版本必须和logstash版本一致 7.9.2 在/usr/local/src/下新建logstash文件夹&#xff0c;解压 下载logstash后查看是否安装成功&#xff0c;在logstash的bin目录下输入指令&#xff1a; ./logstash -e input { stdin { } } output { stdout {} }2.my…

WHAT - React 学习系列(二)

目录 一、官方介绍二、框架具体对比1. Next.js(Pages Router)2. Remix3. Gatsby4. Expo&#xff08;用于原生应用&#xff09;5. Next.js(App Router)Next.js App Router主要特性与 Pages Router 的对比 具体使用示例创建 App Router 项目目录结构示例示例代码 总结 这一篇主要…

文生视频AI工具汇总推荐

目录 Runway Gen-2 Pictory Pika Sora by OpenAI Clipchamp Etna 百度智能云 阿里云视频智能 完整使用报告 在当前的AI技术领域&#xff0c;视频生成工具的发展迅速&#xff0c;为用户提供了从文本到视频的多样化生成方式。以下是一些值得推荐的文生视频AI工具&#x…

NAND闪存市场彻底复苏

在全球内存市场逐渐走出阴霾、迎来复苏曙光之际&#xff0c;日本存储巨头铠侠&#xff08;Kioxia&#xff09;凭借敏锐的市场洞察力和及时的战略调整&#xff0c;成功实现了从生产紧缩到全面复苏的华丽转身。这一转变不仅彰显了企业在逆境中的生存智慧&#xff0c;也为全球半导…

OSPF 动态路由协议(思科、华为)

#交换设备 OSPF 动态路由协议 一、基本概念 1.中文翻译&#xff1a;开放式最短路径优先路由协议&#xff08;open shortest path first&#xff09;&#xff0c;是一个内部网关路由协议&#xff08;一个自治系统内&#xff09;2.也称为&#xff1a;链路状态路由协议&#xf…

醉美酒话:承载着深厚文化底蕴的敬酒词

这些敬酒词凝聚了中华酒文化的精髓&#xff0c;每一句都体现了对美好愿景的深深祝愿&#xff0c;同时也展示了中文语言的丰富与魅力。 一、“步步高升”酒&#xff1a; 第一杯&#xff0c;酒至三分&#xff0c;象征着龙洒点滴、财运将至。我衷心祝愿您财富如江水般滚滚而来&a…

VirtualBox 安装UOS统信服务器操作系统

1、准备 1.1安装VirtualBox 由于过程简单&#xff0c;不做赘述&#xff01; 1.2下载UOS服务器版本 下载免费版本即可 服务器与云计算操作系统-统信软件 (uniontech.com)https://uniontech.com/os-serverCloud.html 2、安装 2.1新建虚拟机 2.2选择虚拟机模式&#xff0c;这…

船舶行业信息安全解决方案介绍

船舶行业信息安全背景&#xff1a; 近年来随着经济复苏、疫情与国际形势影响国内外船舶海运业务蓬勃发展&#xff0c;在业务量激增的背景下出现多类信息安全事件。其中2017年&#xff0c;马士基集团遭到勒索软件攻击&#xff0c;内部业务系统和码头操作系统均受到严重影响&…