博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RocketMQ源码解读系列——1、namesrv源码
阅读量:4092 次
发布时间:2019-05-25

本文共 2252 字,大约阅读时间需要 7 分钟。

我看的源码是RocketMQ的3.2.6版本,该版本是RocketMQ被apache组织孵化之前的版本了,但是不影响源码阅读,阅读源码主要是想学一下大牛们的开发思想

namesrv的项目结构:

NamesrvStartup类作为namesrv的启动入口,主要作用是加载配置文件,环境检查,调用NamesrvController类启动server服务

NamesrvController作为namesrv服务控制类,作为namesrv服务的控制核心,其主要方法如下:

public boolean initialize() {        // 加载KV配置        this.kvConfigManager.load();        // 初始化通信层        this.remotingServer = new NettyRemotingServer(this.nettyServerConfig, this.brokerHousekeepingService);        // 初始化线程池        this.remotingExecutor =                Executors.newFixedThreadPool(nettyServerConfig.getServerWorkerThreads(),                    new ThreadFactoryImpl("RemotingExecutorThread_"));        this.registerProcessor();        // 增加定时任务--扫描过期的broker        this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() {            @Override            public void run() {                NamesrvController.this.routeInfoManager.scanNotActiveBroker();            }        }, 5, 10, TimeUnit.SECONDS);        //打印所有的config        this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() {            @Override            public void run() {                NamesrvController.this.kvConfigManager.printAllPeriodically();            }        }, 1, 10, TimeUnit.MINUTES);        // this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() {        //        // @Override        // public void run() {        // NamesrvController.this.routeInfoManager.printAllPeriodically();        // }        // }, 1, 5, TimeUnit.MINUTES);        return true;    }
/**     * 启动namesrv服务端     * @throws Exception     * @author: yangcheng     */    public void start() throws Exception {        this.remotingServer.start();    }

RouteInfoManager.java类,原注释是“运行过程中的路由信息,数据只在内存中因此宕机后数据消失;但是Broker会定期推送最新数据”,其主要属性如下(类中其他方法主要作用就是对这些属性的增删查改):

/**     * topic与该topic相关连的所有queue--queue中包含了brokerName值     */    private final HashMap
> topicQueueTable; /** * broker的信息缓存 */ private final HashMap
brokerAddrTable; /** * 集群名称与集群中所有brokername的关系缓存 */ private final HashMap
> clusterAddrTable; /** * 激活状态的Broker */ private final HashMap
brokerLiveTable; private final HashMap
/* Filter Server */> filterServerTable;

 

转载地址:http://ypcii.baihongyu.com/

你可能感兴趣的文章
React非嵌套组件通信
查看>>
Websocket 使用指南
查看>>
浏览器兼容性问题解决方案 · 总结
查看>>
一个很棒的Flutter学习资源列表
查看>>
为什么你应该放弃React老的Context API用新的Context API
查看>>
Flutter 布局控件完结篇
查看>>
Koa2初体验
查看>>
Koa 2 初体验(二)
查看>>
Koa2框架原理解析和实现
查看>>
vue源码系列文章good
查看>>
你不知道的Virtual DOM
查看>>
VUE面试题总结
查看>>
写好JavaScript条件语句的5条守则
查看>>
原生JS中DOM节点相关API合集
查看>>
【TINY4412】U-BOOT移植笔记:(7)SDRAM驱动
查看>>
【TINY4412】U-BOOT移植笔记:(12)BEEP驱动
查看>>
单链表的修改和删除
查看>>
C++的三个基本特征:封装、继承、多态
查看>>
C++虚函数的总结
查看>>
什么是URL地址?
查看>>