Broker心跳机制

启动一个定时任务,默认每30秒发送一次注册心跳到Nameserver,最短10秒最长60秒。

\

注册流程

启动时,Broker 一定会执行

public synchronized void registerBrokerAll(final boolean checkOrderConfig, boolean oneway, boolean forceRegister) {
  TopicConfigSerializeWrapper topicConfigWrapper = this.getTopicConfigManager().buildTopicConfigSerializeWrapper();
  //......省略
  if (forceRegister || needRegister(this.brokerConfig.getBrokerClusterName(),
      this.getBrokerAddr(),
      this.brokerConfig.getBrokerName(),
      this.brokerConfig.getBrokerId(),
      this.brokerConfig.getRegisterBrokerTimeoutMills())) {
    doRegisterBrokerAll(checkOrderConfig, oneway, topicConfigWrapper);
  }
}

forceRegister:默认为true

needRegister:

Broker 会去请求所有的 NameServer,查询自己传给 NameServer 的数据,然后跟自己本地的数据版本做一个对比。

只要有任何一台 NameServer 的数据是旧的,Broker 就会重新执行心跳,换句话说:needRegister() 的判定就会为 true。这里给大家准备了一副判定过程的流程图,来方便大家理解:

一次心跳逻辑。心跳的流程也很好理解,因为它不仅仅是心跳本身,还会传输数据,而这就必然会涉及到和投递 Message 类似的操作,即构建 Header、Body,然后发送请求,如下图所示:

在多nameserver情况下,broker会开线程并发的去执行心跳,等待所有心跳结束统一返回,结束阻塞继续处理命令。

心跳传输的数据

数据详情: broker中的topic信息与对应messagequeue信息,

数据版本:上次更新时间戳与版本号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值