美文网首页
RocketMQ学习笔记之MQ路由中心与消息路由

RocketMQ学习笔记之MQ路由中心与消息路由

作者: Moine0828 | 来源:发表于2019-07-21 15:42 被阅读0次

    RocketMQ的路由中心是NameServer,这是整个RocketMQ的大脑,负责Broker的注册,Broker的路由,Broker生命周期的管理等。

    Broker管理

    broker启动时都会向集群中的每一个NameServer进行注册,并且与NameServer保持长连接,每隔30s向NameServer发送心跳包告知自己存活。存活的Broker信息被存放在NameServer本地维护的一个brokerLiveTable中,NameServer每隔10s扫描一次,如果发现当前时间与上一次收到broker心跳包的时间超过120s,也就是缺了4次心跳包,那么就判定该broker不可用,将其进行删除,并且关闭socket连接。brokerLiveTable也是推送给producer的broker列表。
    Broker的路由变化不会主动通知生产者,而是等待生产者自己拉取。

    NameServer存储信息

    NameServer维护了一系列的信息,包括topicQueueTable(消息队列路由信息),brokerAddrTable(broker的基础信息,地址等),brokerLiveTable(broker状态信息),clusterAddrTable(存储了所有broker的名称),filterServerTable(filterServer消息过滤类的列表,后续消息过滤会详细介绍)。

    Broker端发送心跳包主要通过BrokerOuterApi类的registerBrokerAll方法和registerBroker方法实现。在registerBroker方法中组装请求头RegisterBrokerRequestHeader和请求报文体RegisterBrokerRequestBody,最后通过remotingClient来进行网络通讯。RocketMQ的底层网络传输基于Netty。
    NameServer处理心跳包主要是通过RouteInfoManager类实现。registerBroker方法可以得知,服务从brokerAddrTable中获取对应的Broker信息,如果没有则新建,然后更新进去。同时更新消息队列表和brokerLiveTable表。

    相关文章

      网友评论

          本文标题:RocketMQ学习笔记之MQ路由中心与消息路由

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