RocketMq——NameServer源码分析

摘要

RocketMQ架构体系里有四个角色:NameServer、Broker、Producer、Consumer。其中,Broker统称为服务端,Producer属于消息生产者和Consumer属于消息消费者,他们统称为客户端。客户端要如何与服务端通信?拿消息发送举例,一个消息可以发送到哪些Broker上?有新的Broker上线/旧的Broker下线,客户端如何感知到?在RocketMQ中就是NameServer来实现的。

NameServer的两大职责:路由管理、服务注册与发现。它就像微服务架构中的【注册中心】,类似于Zookeeper,但是它比Zookeeper更加的轻量级。Zookeeper是强一致性的,效率较低,RocketMQ的架构设计决定了NameServer不需要那么复杂的功能,因此阿里设计了一款足够轻量的NameServer。

NameServer支持集群部署,但是节点之间不会有任何通信和数据同步,每个节点都是无状态的。Broker启动后,会向所有的NameServer注册自己的路由信息,因此每一个NameServer节点都会有一份完整的数据。当某个NameServer下线了,客户端仍然可以动态感知到服务端的存在。

在NameServer的设计中,Broker信息、路由信息都是保存在内存中的,虽然也支持持久化存储,但是没什么必要。NameServer还有一个组件KVConfigManager,它用来管理键值对类型的配置数据,它是会持久化存储的,持久化目录为home/namesrv/kvConfig.json,通过文件名就知道,它通过JSON的方式来管理数据,每次数据的变动都会自动持久化到磁盘,服务启动后会自动调用load()方法从磁盘加载到内存。

一、NameServer启动流程

要想启动NameServer,只需要运行bin目录下的mqnamesrv脚本。查看这个脚本文件,它的最后一行命令为

sh ${ROCKETMQ_HOME}/bin/runserver.sh org.apache.rocketmq.namesrv.NamesrvStartup $@

它会执行/bin/runserver.sh脚本,启动NamesrvStartup类。因此要分析NameServer的启动流程,以NamesrvStartup类的main方法为入口就好了。

三、NameServer的源码分析

博文参考

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

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

相关文章

【LeetCode每日一题】单调栈 901股票价格跨度

901. 股票价格跨度思路 设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。 例如,如果未来…

elementui 中 el-date-picker 控制选择当前年之前或者之后的年份

文章目录 需求分析 需求 对 el-date-picker控件做出判断控制 分析 给 el-date-picker 组件添加 picker-options 属性&#xff0c;并绑定对应数据 pickerOptions html <el-form-item label"雨量年份&#xff1a;" prop"date"><el-date-picker …

鸿蒙应用/元服务开发-窗口概述

一、窗口模块的定义 窗口模块用于在同一块物理屏幕上&#xff0c;提供多个应用界面显示、交互的机制。 对应用开发者而言&#xff0c;窗口模块提供了界面显示和交互能力。 对终端用户而言&#xff0c;窗口模块提供了控制应用界面的方式。 对整个操作系统而言&#xff0c;窗…

开源模型应用落地-工具使用篇-SLB(二)

一、前言 通过学习"开源模型应用落地"系列文章&#xff0c;我们成功地建立了一个完整可实施的AI交付流程。现在&#xff0c;我们要引入负载均衡&#xff0c;以提高我们的AI服务的性能和故障转移能力。本文将详细介绍如何使用腾讯云的负载均衡技术来将我们的AI服务部署…

洛谷 P1150 Peter 的烟

参考代码and代码解读 #include<iostream> using namespace std; int main() { int n,k,nonu; //n烟的数量&#xff0c;k需要多少根烟头换一支烟&#xff0c;nonu记录烟头的个数 cin>>n>>k; int sumn; //一开始就能吸n支烟 nonusum; …

深度学习之pytorch实现线性回归

度学习之pytorch实现线性回归 pytorch用到的函数torch.nn.Linearn()函数torch.nn.MSELoss()函数torch.optim.SGD() 代码实现结果分析 pytorch用到的函数 torch.nn.Linearn()函数 torch.nn.Linear(in_features, # 输入的神经元个数out_features, # 输出神经元个数biasTrue # 是…

Jlink+OpenOCD+STM32 Vscode 下载和调试环境搭建

对于 Mingw 的安装比较困难&#xff0c;国内的网无法正常在线下载组件&#xff0c; 需要手动下载 x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z 版本的软件包&#xff0c;添加环境变量&#xff0c;并将 mingw32-make.exe 名字改成 make.exe。 对于 OpenOCD&#xff0c;需要…

中标麒麟桌面操作系统软件及安装方法

中标麒麟桌面操作系统软件及安装方法 安装力法 TeXworks编辑器 1、打开终端 输入“ sudo yum install texworks "命令 2、打开软件中心&#xff0c;搜索“TeX 编辑器”下载安装编程软件Anjuta集成开发环境 1、打开终端 输入“ sudo yum install anjuta ” 命令 2、打开软…

Python爬虫知识图谱

下面是一份详细的Python爬虫知识图谱&#xff0c;涵盖了从基础入门到进阶实战的各个环节&#xff0c;涉及网络请求、页面解析、数据提取、存储优化、反爬策略应对以及法律伦理等多个方面&#xff0c;并配以关键点解析和代码案例&#xff0c;以供读者深入学习和实践。 一、Pyth…

django中session值的数据类型是dict,需要手动save(),更新才会传递到其他页面。

django 项目在一个页面中删除了session中的某一个成员&#xff08;del request.session["test"]["a"]&#xff09;&#xff0c;切换到另外一个页面的时候&#xff0c;session中的那个成员居然还在。让我一阵莫名其妙。 # 对session["test"]进行初…

mysql 2-18

加密与解密函数 其他函数 聚合函数 三者效率 GROUP BY HAVING WHERE和HAVING的区别 子查询 单行子查询和多行子查询 单行比较操作符 多行比较操作符 把平均工资生成的结果当成一个新表 相关子查询 EXISTS 一条数据的存储过程 标识符命名规则 创建数据库 MYSQL的数据类型 创建表…

目标检测一般性问题

Precision(查准率/精确率) 所有预测为正样本的结果中&#xff0c;预测正确的比率。 Precision TP / (TP FP)Recall (查全率/召回率) 所有正样本中被正确预测的比率。 Recall TP / (TP FN)正样本负样本预测为正True Positive(TP)False Positive(FP)预测为负False Negati…

利用ChatGPT进行数据分析——如何提出一个好的prompt

利用ChatGPT进行数据分析——如何提出一个好的prompt ​ 使用ChatGPT时&#xff0c;能否得到一个好的输出结果&#xff0c;关键在于能否提出好的prompt。 1.1 prompt是什么 ​ 现在大家把向ChatGPT输入的内容称作prompt&#xff08;提示&#xff09;&#xff0c;它的作用是引…

Docker部署Java项目

打包 添加 <!-- 打包插件--> <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins> </build> 通过执行以下命令进…

MySQL数据库基础(九):SQL约束

文章目录 SQL约束 一、主键约束 二、非空约束 三、唯一约束 四、默认值约束 五、外键约束&#xff08;了解&#xff09; 六、总结 SQL约束 一、主键约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有…

String为什么是不可变的?

原因一、String字符串类型的数据结构 字符串在String类的内部是用一个char[]数组表示的,而这个数组使用final关键字修饰的&#xff0c;所以不能修改。 举例说明&#xff1a; String ip"127.0.0.1"; String retip.replace(".","#"); System.out.…

spring通过类名称获取名字

在Spring中&#xff0c;可以使用反射来根据类的全限定名获取其对应的Bean名称。 下面是示例代码&#xff1a; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main {publi…

BUGKU-WEB 留言板1

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 之间写过一题类似的&#xff0c;所以这题应该是有什么不同的那就按照之前的思路进行测试试试提示说&#xff1a;需要xss平台接收flag&#xff0c;这个和之前说的提示一样 相关工具 xss平台&#xf…

银河麒麟操作系统自动同步时间更新

1、银河麒麟操作系统基于Centos8的&#xff0c;因centos8取消了ntp服务器&#xff0c;所以导致之前使用ntpdate命令无法同步时间 2、centos默认使用chrony模块来进行同步时间 3、修改chrony配置同步时间服务器 vim /etc/chrony.conf 4、目前使用的是阿里云的时间服务器&…

Postgresql源码(122)Listen / Notify与事务的联动机制

前言 Notify和Listen是Postgresql提供的不同会话间异步消息通信功能&#xff0c;例子&#xff1a; LISTEN virtual; NOTIFY virtual; Asynchronous notification "virtual" received from server process with PID 8448. NOTIFY virtual, This is the payload; Asy…