美文网首页
RocketMQ-NameServer模块解析之服务处理

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

作者: 一语长情 | 来源:发表于2022-07-16 15:38 被阅读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服务的核心功能

    相关文章

      网友评论

          本文标题:RocketMQ-NameServer模块解析之服务处理

          本文链接:https://www.haomeiwen.com/subject/tjllirtx.html