MQ NameServer模块划分
上图是之前讨论确定的系统架构(后续内容会按照这个架构来叙述),其中:
-
NameServer做Broker的服务发现,即客户端可以通过NameServer拿到Broker的信息
-
Broker汇报数据到NameServer
NameServer的模块划分
在进行NameServer的模块划分讨论前,先整理一下NameServer的功能:
-
做Broker的服务发现
-
提供元数据(Topic、Group等)
-
也可以作为Console的操作入口(整个MQ系统是没有DB的,Console可以通过NameServer获取系统信息进行展示)
结合以上提供的功能和之前几篇对系统架构的介绍,NameServer是不需要对数据进行持久化的,因为NameServer的数据都是来自于Broker汇报的。可以认为NameServer是一个无状态的节点。NameServer可以非常方便的做集群部署,高可用之类的,只需要Broker将数据汇报到多个NameServer即可(RocketMQ就是这种架构)。
基于以上的约定(NameServer尽量简单,没有持久化等),对NameServer的模块划分如下。
1. 网络模块
这个不再多说了,属于最基础的公共模块了,Broker、Client、NameServer都会有。
除了基础的网络实现,还有网络相关的就是各个网络请求的处理,比如新建Topic、新建Group等。按照请求来源的维度,NameServer上会包含:
-
ClientPacketHandler
-
BrokerPacketHandler
-
ConsolePacketHandler
-
...
这些都是网络包的处理入口,可以算到网络模块中。
2. 元数据模块
除去网络模块外,NameServer剩余内容都是对元数据的汇总处理,包含以下组件:
-
TopicManager:Topic元数据的汇总,处理Topic的增删改查
-
GroupManager:Group元数据的汇总,处理Group的增删改查
-
BrokerManager:Broker的管控,进行Broker的上下线及配置变更等
-
PositionManager:汇总位点信息
-
InstanceManager:汇总Consumer和Producer实例
汇总以上内容,NameServer模块如下:
以上是基于NameServer的功能限定下讨论的模块。NameServer在MQ中是最简单的一个大模块,也是和消息发送和消费关系最小的模块,所以只有这么多内容。 (NameServer更多在Consumer、Producer初始化的时候会涉及到,一旦运行起来,过程中并不需要进行太多的交互,所以运行过程中脱离了NameServer也是能正常执行消费和发送的)
RocketMQ的NameServer功能上更加简化,不超过1000行代码。
这就是RocketMQ(开源版本)NameServer所有的代码了
结语
本篇主要是把NameServer的组件罗列一下,相对来说比较简单。
下一篇会开始整理MQ系统中的数据流和操作流程,包括消息和元数据在MQ中的流转、元数据的操作、消息的写入、消息的读取等流程。
往期内容:
欢迎关注此公众号,将坚持不懈的写MQ相关的技术文章,希望能和更多的朋友交流。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构