RocketMQ-NameServer模块解析之服务处理

2022-07-16  本文已影响0人  一语长情

RocketMQ-NameServer模块解析之服务启动

上篇文章主要介绍了NameServer服务初始化以及加载各模块启动的过程,本篇来分析一下NameServer的服务处理

NameServer的定位就是一个简单的Broker注册以及Topic路由管理中心,服务处理也是围绕这个定位来的

本篇主要介绍2个类文件,一个是DefaultRequestProcessor 一个是BrokerHousekeepingService

DefaultRequestProcessor是NameServer的请求处理器,NameServer提供的所有服务均由这个处理器来处理并完成响应

processRequest是DefaultRequestProcessor执行请求处理的方法,不同的请求Code对应不同的业务处理方法

RocketMQ的每一次请求都会带上对应的Code,用来标识对应的处理函数

DefaultRequestProcessor所处理的业务请求主要是围绕注册在NameServer上面的Broker信息以及路由信息,而这些Broker信息以及路由信息均围绕 RouteInfoManager来展开,RouteInfoManager这个路由管理类的定义的属性如下:

RouteInfoManager这个类主要围绕着 brokerLiveTable clusterAddrTable brokerAddrTable  topicQueueTable来展开

注册或者取消注册Broker 、获取或者删除Topic等命令均是操作这几个数据结构

这些数据结构存储的内容均保存在内容中,不会持久化的文件

为了避免产生线程安全问题以及增加读写的效率,使用了读写锁ReadWriteLock.

举个注册Borker的列子,也即是对应请求命令REGISTER_BROKER

经过以上的代码内容可以看到,broker的注册,也是围绕着RouteInfoManager类中的几个属性来处理的

上面介绍完DefaultRequestProcessor 接下来讲一下BrokerHousekeepingService,这个类在构造remotingServer也即是Netty服务的时候作为构造参数传入

这个类就是一个事件监听器的实现类,当Netty发送一些连接事件的时候,交由它去处理

一个ChannelDuplexHandler既代表一个出站Handler也代表一个入站Handler,所以出入站的事件都会由NettyConnectManageHandler来进行处理,当产生事件时会放入队列中,事件异步去处理,这也是为了避免阻塞Reactor线程处理任务的效率

NettyEventExecutor服务线程来处理事件队列中的事件,红框中标示拿到的listener就是BrokerHousekeepingService,根据不同的事件处理进行能不同的处理

处理的内容也是当broker断开连接或者心跳超时,回调RouteInfoManage的onChannelDestroy方法

onChannelDestroy也是围绕RouteInfoManager中的那几个数据结构展开,目标是清理该broker的路由信息

至此,NameServer的服务处理已经梳理完成,核心点在于DefaultRequestProcessor和RouteInfoManager这两个类的配合,构成了NameServer服务的核心功能

上一篇下一篇

猜你喜欢

热点阅读