大家好,我是小郭。在上一篇文章中,我们已经完成了Docker环境中RocketMQ的构建。接下来,我们主要从五个方面学习名称服务器,即体系结构设计,启动过程,路线注册,故障删除,路线发现。
思维问题:
入口:org.apache.rocketmq.namesrv.namesrvstartup#main0
步骤1:分析配置文件,填写namesrvconfig,nettyserverconfig和return namesrvcontroller实例实例
当我们启动名称服务器时,我们通常使用https://www.shouxicto.com/article/mqbaneserver -c configfile -p。-c和-p的主要功能是什么?
步骤2:根据属性创建namesRvController实例,并初始化此实例
入口:namesrvstartup#开始
超过120年代,从名称服务器中删除并直接删除以降低设计的复杂性
步骤3:名称服务器停止了该过程,使用JVM挂钩函数监视代理
钩函数的作用也主要用于结束。在关闭JVM过程之前,一些清洁工作,例如关闭资源或同步。
最后,基于Netty实施的RPC服务器,NetTyRemotingServer启动了NetTyServerConfig配置
通过对上面的源代码的分析,我们现在可以回答有关思考的问题。我们只需要配置namesRvConfig和nettyserverconfig即可使用Netty启动名称服务器。
上面提到的名称服务器的路由信息管理主要是注册,故障和路由信息存储路由。
问题:
步骤1:使用线程池穿越名称服务器以依次发送心跳袋
入口:BrokerController#开始#register Broker#Doregister Brokerker
获取整个地址
包装请求标题
穿越所有名称服务器
步骤2:心跳包处理
入口:RouteInfomanager#register Broker
在注册的经纪人中,为了防止同时修改路由信息,整体添加了写锁。
步骤3:同时,名称服务器仅处理一个经纪人心跳袋,并连续执行多个心跳袋
名称服务员扫描经纪人每10s。当BrokerLive的最终更新时间差距超过120s时,它被认为是无效的。
穿越经纪人的集合,删除失败经纪人信息
入口:RouteInfomanager#Scannotactive Broker
路由发现不是真实的时间。当主题更改时,名称服务器不会主动推向客户端。
入口:DefaultrequestProcessor#GetRouteinFobyTopic
通过读取名称服务器源代码,一些摘要
原始:https://juejin.cn/post/7101577870874509349
