前言
RocketMQ在启动 Namesrv 的过程中会初始化 NamesrvController 核心组件,NamesrvController初始化过程中 又引用了 FileWatchService 文件变更监听服务组件,它本身实现ChannelEventListener接口,负责监听Netty通信服务器产生的变更事件。
源码版本:4.9.3
RocketMQ入门请查阅我的另一篇笔记 RocketMQ入门与最佳实践-CSDN博客
接口核心数据行为
它的处理逻辑比较少,但是也比较重要,负责监听了网络连接事件、网络关闭事件、网络异常事件,网络空闲事件,并维护对应broker的路由信息。 路由信息组件内部逻辑请查阅我的另一篇笔记。RocketMQ源码 Namesrv-RouteInfoManager路由管理组件-CSDN博客
public class BrokerHousekeepingService implements ChannelEventListener {
private static final InternalLogger log = InternalLoggerFactory.getLogger(LoggerName.NAMESRV_LOGGER_NAME);
private final NamesrvController namesrvController;
public BrokerHousekeepingService(NamesrvController namesrvController) {
this.namesrvController = namesrvController;
}
/**
* channel 连接事件
* @param remoteAddr
* @param channel
*/
@Override
public void onChannelConnect(String remoteAddr, Channel channel) {
}
/**
* channel 关闭事件,关闭时需要将broker从路由信息中删除
* @param remoteAddr
* @param channel
*/
@Override
public void onChannelClose(String remoteAddr, Channel channel) {
this.namesrvController.getRouteInfoManager().onChannelDestroy(remoteAddr, channel);
}
/**
* channel 异常事件,关闭时需要将broker从路由信息中删除
* @param remoteAddr
* @param channel
*/
@Override
public void onChannelException(String remoteAddr, Channel channel) {
this.namesrvController.getRouteInfoManager().onChannelDestroy(remoteAddr, channel);
}
/**
* channel 空闲事件,关闭时需要将broker从路由信息中删除
* @param remoteAddr
* @param channel
*/
@Override
public void onChannelIdle(String remoteAddr, Channel channel) {
this.namesrvController.getRouteInfoManager().onChannelDestroy(remoteAddr, channel);
}
}