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就可以打印所有配置项。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

胡说八道(24.6.12)——数字电子技术以及Modelsim

上回书说到数电中的最常用的表达式——逻辑表达式(由布尔代数组成)以及常用的两种图表——真值表(真值表表示的是所有的输入可能的线性组合以及输出)和卡诺图(卡诺图则是一种化简工具,排除冗余项,合并可合并项)。 今天,先来看看昨天说的基本逻…

AI写代码,CS还有前途吗?加州大学伯克利分校:CDSS申请人数激增48%!

目录 01 CS入学人数暴涨 02 人类Coder可堪大任 03 AI还没有学会创新 04 编程与农耕不同 AI写了这么多代码,你还应该学习计算机科学吗? 新的数据显示,学生们仍然热衷于选修计算机科学:加州大学伯克利分校(UCB&#…

AI训练Checkpoint对存储的影响

检查点(Checkpoints)是机器学习和深度学习训练过程中的一个重要机制,旨在定期保存训练状态,以便在训练过程中遇到失败或中断时能够从中断处恢复训练,而无需从头开始。 随着模型参数量的剧增,Checkpoint文件…

Linux_理解程序地址空间和页表

目录 1、进程地址空间示意图 2、验证进程地址空间的结构 3、验证进程地址空间是虚拟地址 4、页表-虚拟地址与物理地址 5、什么是进程地址空间 6、进程地址空间和页表的存在意义 6.1 原因一(效率性) 6.2 原因二(安全性) …

项目实战中学透Spring-业务场景驱动-Spring01(IOCDI)

软件环境 JDK1.8 Maven3.6 IDEA2022.3(Ultimate Edition) Spring5.3.29 主要知识点大纲 1.Spring简介 2.Spring整体架构 3.业务场景中理解Spring IOC(控制反转)和DI(依赖注入) 4.业务场景中理解IOC容器,实例化容器,实例化Bean的几种方式 5.业务…

【数据结构与算法 刷题系列】判断链表是否有环(图文详解)

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法 经典例题》C语言 期待您的关注 ​ ​ 目录 一、问题描述 二、解题思路 1.解题思路: 2.快慢指针的移动分三个…

【C++】:list容器的基本使用

目录 🚀前言一,list的介绍二,list的基本使用2.1 list的构造2.2 list迭代器的使用2.3 list的头插,头删,尾插和尾删2.4 list的插入和删除2.5 list 的 resize/swap/clear 🚀前言 list中的接口比较多&#xff…

Android Calculator2源码分析与修改

private CalculatorDisplay mDisplay; private Symbols mSymbols new Symbols(); -41,6 44,7 class Logic { private int mLineLength 0; private static final String INFINITY_UNICODE “\u221e”; private static final String ZMS_NUMBER “55555”; public stat…

Windows系统下制作Windows Server系统U盘启动及安装指导

Windows系统下制作Windows Server系统U盘启动及安装指导 一、准备工作 U盘不得小于8G(推荐使用usb3.0接口);下载好对应的系统镜像;下载RUFUS或者软通碟U盘制作启动软件; 二、Windows操作系统下制作U盘启动(这里以使用RUFUS软件…

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

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

day63 单调栈part02 42. 接雨水 84.柱状图中最大的矩形

42. 接雨水 1.首先单调栈是按照行方向来计算雨水,如图: 2.使用单调栈内元素的顺序 从大到小还是从小到大呢? 从栈头(元素从栈头弹出)到栈底的顺序应该是从小到大的顺序。 因为一旦发现添加的柱子高度大于栈头元素…

【MATLAB】- 随笔 :如何检测一个字符串数组中是否包含自己想要的序列

1. 问题重述 比如我现在有一个 strArray [“a”, “1”, “2”, “b”]; 我想确定里面是否包含[“1”, “2”]; ,由于MATLAB基础库中没有现成的函数可以直接检查连续子数组或连续多个元素的序列,下面给出自定义函数来实现这一功能。 2. 自定义函数 2…

部分CVE复现Web(1)

Apache HTTP Server 路径穿越漏洞CVE-2021-41773 ​ 首先,先来看一下这个漏洞的官方描述: ​ CVE-2021-41773 是在 Apache HTTP Server 2.4.49 中对路径规范化所做的更改中发现了一个缺陷。攻击者可以使用路径遍历攻击将 URL 映射到预期文档根目录之外的…

【Linux 12】进程控制

文章目录 🌈 Ⅰ 进程创建01. fork 函数介绍02. 写时拷贝03. fork 常规用法04. fork 调用失败的原因 🌈 Ⅱ 进程终止01. 进程退出场景02. 常见退出方法 🌈 Ⅲ 进程等待01. 进程等待必要性02. 进程等待的方法2.1 wait 方法2.2 waitpid 方法 03.…

函数式编程基本语法

文章目录 1.函数对象表现形式1.Lambda表达式(功能全面)1.基本语法2.只有一行逻辑,该逻辑结果是返回值3.复杂逻辑4.省略参数类型(可以通过上下文推导出类型时,比如实现了函数式接口)5.只有一个参数时&#x…

NAND闪存市场彻底复苏

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

在 Stable Diffusion 中控制光线的三种方式

光线在摄影中扮演着至关重要的角色,并对图像的整体质量和意境产生重要影响。你可以利用光线来增强主题,创造深度和立体感,传达情感,并突出重要细节。 在本文中,你将了解通过以下方法来控制光线: 光线提示…

基于Java的度分秒坐标转纯经纬度坐标的漂亮国基地信息管理

目录 前言 一、空间表设计 1、物理表结构 二、后台数据管理 1、数据去重 2、去重的具体实现 3、度分秒数据格式转换 4、具体的转换方法 5、新增界面的实现 三、数据管理界面 总结 前言 众所周知,漂亮国在全球范围内部署了大量的基地,用以维持其…

阿里巴巴全球数学竞赛报名条件

#竞赛概览与历史# “阿里巴巴全球数学竞赛”(Alibaba Global Mathematics Competition)由阿里巴巴公益、阿里巴巴达摩院共同举办,面向全球的数学爱好者,集竞赛、培训、交流于一体,旨在全球范围内引领开启关注数学、理解…