当前位置:首页 > 科技  > 软件

代码很少,却很优秀!RocketMQ的NameServer是如何做到的?

来源: 责编: 时间:2024-06-14 08:48:57 256观看
导读今天我们来一起深入分析 RocketMQ的注册中心 NameServer。本文基于 RocketMQ release-5.2.0。首先,我们回顾下 RocketMQ的内核原理鸟瞰图:从上面的鸟瞰图,我们可以看出:Nameserver既和 Broker交互,也和 Producer和 Consume

今天我们来一起深入分析 RocketMQ的注册中心 NameServer。2if28资讯网——每日最新资讯28at.com

本文基于 RocketMQ release-5.2.0。2if28资讯网——每日最新资讯28at.com

首先,我们回顾下 RocketMQ的内核原理鸟瞰图:2if28资讯网——每日最新资讯28at.com

2if28资讯网——每日最新资讯28at.com

2if28资讯网——每日最新资讯28at.com

三、心跳机制

心跳机制是 NameServer维护 Broker的路由信息最重要的一个抓手,主要分为接收心跳、处理心跳、心跳超时 3部分:2if28资讯网——每日最新资讯28at.com

1.接收心跳

Broker每 30s会向所有的 NameServer发送心跳包,告诉它们自己还存活着,从而更新自己在 NameServer的状态,整体交互如下图:2if28资讯网——每日最新资讯28at.com

2if28资讯网——每日最新资讯28at.com

2.处理心跳

NameServer收到心跳包时会更新 brokerLiveTable缓存中 BrokerLiveInfo的 lastUpdateTimeStamp信息,整体交互如下图:2if28资讯网——每日最新资讯28at.com

2if28资讯网——每日最新资讯28at.com

处理逻辑可以参考源码:org.apache.rocketmq.namesrv.processor.DefaultRequestProcessor#processRequest#brokerHeartbeat:2if28资讯网——每日最新资讯28at.com

public RemotingCommand brokerHeartbeat(ChannelHandlerContext ctx,    RemotingCommand request) throws RemotingCommandException {    final RemotingCommand response = RemotingCommand.createResponseCommand(null);    final BrokerHeartbeatRequestHeader requestHeader =        (BrokerHeartbeatRequestHeader) request.decodeCommandCustomHeader(BrokerHeartbeatRequestHeader.class);    this.namesrvController.getRouteInfoManager().updateBrokerInfoUpdateTimestamp(requestHeader.getClusterName(), requestHeader.getBrokerAddr());    response.setCode(ResponseCode.SUCCESS);    response.setRemark(null);    return response;}

3.心跳超时

NameServer每隔 10s(每隔5s + 5s延迟)扫描 brokerLiveTable检查 Broker的状态,如果在 120s内未收到 Broker心跳,则认为 Broker异常,会从路由表将该 Broker摘除并关闭 Socket连接,同时还会更新路由表的其他信息,整体交互如下图:2if28资讯网——每日最新资讯28at.com

2if28资讯网——每日最新资讯28at.com

private void startScheduleService() {this.scanExecutorService.scheduleAtFixedRate(NamesrvController.this.routeInfoManager::scanNotActiveBroker,        5, this.namesrvConfig.getScanNotActiveBrokerInterval(), TimeUnit.MILLISECONDS);}

源码参考:org.apache.rocketmq.namesrv.routeinfo.RouteInfoManager#unRegisterBroker(),核心流程:2if28资讯网——每日最新资讯28at.com

  • 遍历brokerAddrTable
  • 遍历broker地址
  • 根据 broker地址移除 brokerAddr
  • 如果当前 Topic只包含待移除的 Broker,则移除该 Topic

四、其他核心源码解读

NameServer启动

NameServer的启动类为:org.apache.rocketmq.namesrv.NamesrvStartup,整个流程如下图:2if28资讯网——每日最新资讯28at.com

2if28资讯网——每日最新资讯28at.com

NameServer启动最核心的 3个事情是:2if28资讯网——每日最新资讯28at.com

  • 加载配置:NameServerConfig、NettyServerConfig主要是映射配置文件,并创建 NamesrvController。
  • 启动 Netty通信服务:NettyRemotingServer是 NameServer和Broker,Producer,Consumer通信的底层通道 Netty服务器。
  • 启动定时器和钩子程序:NameServerController实例一方面处理 Netty接收到消息后,一方面内部有多个定时器和钩子程序,它是 NameServer的核心控制器。

五、总结

NameServer并没有采用复杂的分布式协议来保持数据的一致性,而是采用 CAP理论中的 AP,各个节点之间是Peer to Peer的对等关系,数据的一致性通过心跳机制,定时器,延时感知来完成。2if28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-93682-0.html代码很少,却很优秀!RocketMQ的NameServer是如何做到的?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: React 实现给密码输入框加上【密码强度】展示?

下一篇: 建议直接收藏的三个 Go 库

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 电视息屏休眠仍有网络上传 爱奇艺被质疑“薅消费者羊毛”

    记者丨宁晓敏 见习生丨汗青出品丨鳌头财经(theSankei) 前不久,爱奇艺发布了一份亮眼的一季报,不仅营收和会员营收创造历史最佳表现,其运营利润也连续6个月实现增长。自去年年初
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页“充值中心”入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 造车两年股价跌六成,小米的估值逻辑变了吗?

    如果从小米官宣造车后的首个交易日起持有小米集团的股票,那么截至2023年上半年最后一个交易日,投资者将浮亏59.16%,同区间的恒生科技指数跌幅为52.78%
  • 华为和江淮汽车合作开发百万元问界MPV?双方回应来了

    8月1日消息,郭明錤今天在社交平台发文称,华为正在和江淮汽车合作,开发售价在100万元的问界MPV,预计在2024年第2季度量产,销量目标为上市首年交付5万辆。
  • 苹果、三星、惠普等暂停向印度出口笔记本和平板电脑

    集微网消息,据彭博社报道,在8月3日印度突然禁止在没有许可证的情况下向印度进口电脑/平板及显示器等产品后,苹果、三星电子和惠普等大公司暂停向印度
Top