RocketMQ路由注册与删除

54次阅读

共计 927 个字符,预计需要花费 3 分钟才能阅读完成。

简介

RocketMQ 路由注册与删除是通过 Broker 与 NameServer 的心跳功能实现的。Broker 启动时向集群中所有的 NameServer 发送心跳语句,每隔 30s 向集群中所有 NameServer 发送心跳包,NameServer 收到 Broker 心跳包时会更新 brokerLiveTable 中的 lastUpdateTimestamp,然后 NameServer 每隔 10s 扫描 brokerLiveTable, 如果连续 120s 没有收到心跳包,NameServer 将移除该 Broker 的路由信息。

路由信息

路由实现类是 org.apache.rocketmq.namesrv.routeinfo.RouteInfoManager

  • topicQueueTable:Topic 消息队列路由信息,消息发送时根据路由表进行负载均衡。
  • brokerAddrTable:Broker 基础信息,包含 brokerName、所属集群名称、主备 Broker 地址。
  • clusterAddrTable:Broker 集群信息,存储集群中所有 Broker 名称。
  • brokerLiveTable:Broker 状态信息。NameServer 每次收到心跳包会更新该信息。
  • filterServerTable:Broker 上的 FilterServer 列表,用于类模式消息过滤。

路由注册

路由注册过程描述如下:

  1. Broker 启动时会向所有 NameServer 注册路由,然后启动一个定时任务,每隔 30s 发送心跳包;
  2. BrokerOuterAPI 中的 registerBrokerAll 实际上是通过 Netty 客户端将注册路由的请求发往 NameServer 的 Netty 服务端;
  3. NameServer 的 Netty 服务端接受到请求后,交给 DefaultRequestProcessor 的 processRequest 处理,最后委托给了 RouteInfoManager 的 registerBroker 方法,填充或者更新路由信息。

路由删除

在 NamesrvController 的 initialize 启动了个定时任务每隔 10s 扫描 brokerLiveTable,如果连续 120s 没有收到心跳包,NameServer 将移除该 Broker 的路由信息

正文完
 0