作者源码阅读笔记主要采用金山云文档记录的,所有的交互图和代码阅读笔记都是记录在云文档里面,本平台的文档编辑实在不方便,会导致我梳理的交互图和文档失去原来的格式,所以整理在文档里面,供大家阅读交流
相关重要类介绍说明
请求处理组件NamesrvController类
名称 | 描述 | 默认值 |
namesrvConfig | 主要包含了 NameServer 自身运行的参数 | |
nettyServerConfig | 主要包含了 Netty 服务端的配置参数 | |
routeInfoManager | 路由管理器组件 | |
scheduledExecutorService | 调度线程池,执行定时任务,两件事:1. 检查存活的broker状态 2. 打印配置 | |
kvConfigManager | 管理kv配置 | |
remotingServer | 网络层封装对象 | |
brokerHousekeepingService | ChannelEventListener ,用于监听channel 状态,当channel状态 发生改变时 close idle... 会向 事件队列发起事件,事件最终由 该service处理 | |
remotingExecutor | 业务线程池,netty 线程 主要任务是 解析报文 将 报文 解析成 RemotingCommand 对象,然后 就将 该对象 交给 业务 线程池 再继续处理 |
NamesrvConfig配置类
名称 | 描述 | 默认值 |
rocketmqHome | RocketMQ的主目录 | rocketmq.home.dir |
kvConfigPath | NameServer 存储 KV 配置属性的文件地址 | user.home/namesrv/kvconfig.json |
configStorePath | 默认配置文件的地址,指定配置文件启动通过-c configPath 命令 | user.home/namesrv/namesrv.properties |
productEnvName | 生产环境名称 | center |
clusterTest | 是否启动集群测试,默认不开启 | false |
orderMessageEnable | 是否支持有序消息,默认不支持 | false |
NettyServerConfig 配置类
名称 | 描述 | 默认值 |
listenPort | 监听端口,下面启动时被默认覆盖为9876 | 8888 |
serverWorkerThreads | Netty工作线程数 | 8 |
serverCallbackExecutorThreads | Netty的public线程池的线程数,默认是0 | 0 |
serverSelectorThreads | Netty的IO线程池线程数量。主要负责处理网络请求,解析请求包,再转发到各个业务线程池。最后返回结果 | 3 |
serverOnewaySemaphoreValue | Broker端的两个配置参数 sendOneWay 消息请求的最大并发度 | 256 |
serverAsyncSemaphoreValue | Broker端的两个配置参数 异步消息发送的最大并发数 | 64 |
serverChannelMaxIdleTimeSeconds | 网络连接最大空闲时间默认120s,超过该空闲时间的连接被关闭 | 120s |
serverSocketSndBufSize | 网络Socket发送缓冲区大小 默认64KB | 64KB |
serverSocketRcvBufSize | 接收端缓存区大小 默认64KB | 64KB |
serverPooledByteBufAllocatorEnable | 是否开启 ByteBuffer 缓存,默认开启 | true |
useEpollNativeSelector | 是否启用Epoll模型,Linux 下默认是开启的 | false |
RouteInfoManager路由管理器
名称 | 描述 | 默认值 |
BROKER_CHANNEL_EXPIRED_TIME | broker channel 过期时间 | 1000 * 60 * 2 |
topicQueueTable | topic 消息队列的路由信息,Produer 就根据该路由表进行负载均衡的发送消息 HashMap<String/* topic */, List<QueueData>> topicQueueTable | |
brokerAddrTable | broker节点地址表 HashMap<String/* brokerName */, BrokerData> | |
clusterAddrTable | 集群地址表 HashMap<String/* clusterName */, Set<String/* brokerName */>> clusterAddrTable | |
brokerLiveTable | broker节点存活表 HashMap<String/* brokerAddr */, BrokerLiveInfo> brokerLiveTable 备注:Broker每30s 发一次心跳,NameServer 收到心跳后,就会将对应的时间戳保存到该 Broker 下的状态信息中,用于后面每10s 扫描判断是否超过120s 未收到心跳 | |
filterServerTable | HashMap<String/* brokerAddr */, List<String>/* Filter Server */> |
DefaultRequestProcessor 网络请求处理器
该处理器就是专门负责处理 NameServer 收到的网络请求,对应的方法为processRequest
模块 | requestCode | 处理方法 | 描述 |
| 100 | putKVConfig() | 添加KV配置 |
101 | getKVConfig() | 查询KV配置 | |
102 | deleteKVConfig() | 删除KV配置 | |
219 | getKVListByNamespace() | 通过命名空间获取KV配置集 | |
| 103 |
registerBrokerWithFilterServer()
registerBroker() | 注册broker节点信息 |
104 | unregisterBroker() | 注销下线broker节点信息 | |
| 105 | getRouteInfoByTopic() | 根据topic获取路由信息 |
| 106 | getBrokerClusterInfo() | 获取所有broker节点集群信息 |
| 205 | wipeWritePermOfBroker() | 主要用于在平滑升级Broker时实现无损停写操作。
|
| 327 | addWritePermOfBroker() | 给broker添加写权限 |
| 206 | getAllTopicListFromNameserver() | 从NameServer 服务获取所有topic主题列表 |
216 | deleteTopicInNamesrv() | 删除NameServer服务上的topic主题 | |
224 | getTopicsByCluster() | 获取集群中的topic主题列表 | |
304 | getSystemTopicListFromNs() | 从NameServer服务中获取所有系统主题列表 | |
| 311 | getUnitTopicList() | 从NameServer服务中获取所有单元测试主题列表 |
312 | getHasUnitSubTopicList() | 从NameServer服务中获取所有子单元测试主题列表 | |
313 | getHasUnitSubUnUnitTopicList() | ... | |
| 318 | updateConfig() | 更新configuration配置 |
319 | getConfig() | 获取配置信息 |