美文网首页
RocketMq-路由发现

RocketMq-路由发现

作者: 麦大大吃不胖 | 来源:发表于2020-12-16 13:08 被阅读0次

by shihang.mai

1. 流程图

rocketmq路由

2. 路由发现过程

  1. broker向所有的nameServer注册,然后定时发送心跳给所有的nameServer
  2. 心跳包有两个属性,header+crc32的body,
  3. 发心跳包给nameServer,nameServer通过核心类DefaultRequestProcessor处理,RequestCode=REGISTER_BROKER,将心跳包信息分别放到brokerAddrTable和topicQueueTable
  4. producer发送TopicName给nameServer,一样用核心类DefaultRequestProcessor处理,但是RequestCode=GET_ROUTEINFO_BY_TOPIC,然后通过pickupTopicRouteData()方法,
  • 拿TopicName去匹配topicQueueTable,放入List<QueueData>
  • 有了List<QueueData>,拿brokerName去匹配brokerAddrTable,放入List<BrokerData>
  1. 将List<QueueData>和List<BrokerData>封装为TopicRouteData返回给producer
  2. 有了BrokerData定位ip,有了queueData定位queue,这样就可以向特定的broker特定的queue发msg了
BrokerData

private String cluster;
private String brokerName;
private HashMap<Long/* brokerId */, String/* broker address */> brokerAddrs;
QueueData

private String brokerName;
private int readQueueNums;
private int writeQueueNums;
private int perm;
private int topicSynFlag;

consumer同理

3. 题外话

  1. rocketmq4.5前并不支持容灾,即master挂了,salve并不会自动补上。

  2. 在4.5后,利用DLedger支持容灾,DLedger对commitlog包装。

  3. DLedger作用: 选举、数据复制(用的commitlog)

相关文章

网友评论

      本文标题:RocketMq-路由发现

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