当前位置: 首页>后端>正文

RocketMQ工作原理——消息的生产

消息的生产过程

Producer可以将消息写入到某Broker中的某Queue中,其经历了如下过程

  1. Producer发送消息之前,会先向NameServer发出获取消息Topic的路由信息的请求
  2. NameServer返回该Topic的路由表及Broker列表
  3. Producer根据代码中指定的Queue选择策略,从Queue列表中选出一个队列,用于后续存储消息
  4. Producer对消息做一些特殊处理,例如,消息本身超过4M,则会对其进行压缩
  5. Producer向选择出的Queue所在的Broker发出RPC请求,将消息发送到选择出的Queue

路由表:实际就是一个Map,key为topic名称,value是一个QueueData实例表,QueueData并不是一个Queue对应一个QueueData,而是一个Broker中该Topic的所有Queue对应一个QueueData。即,只要涉及到该Topic的Broker,一个Broker对应一个QueueData。QueueData中包含brokerName。简单来说,路由表的key为topic名称,value则为所有涉及该Topic的BrokerName列表
Broker列表:其实际也是一个Map。一套brokerName名称相同的Master-Slave小集群对应一个BrokerData。BrokerData中包含brokerName及一个Map。该Map的key为brokerId,value为该broker对应的地址。brokerId为0表示该Broker为Master,非0表示Slave

Queue选择算法

对于无序消息,其Queue选择算法,也成为消息投递算法,常见有两种:

轮询算法

默认选择算法。该算法保证了每个Queue中可以均匀的获取到消息

最小投递延迟算法

该算法会统计每次消息投递的时间延迟,然后根据统计出来的结果将消息投递到时间延迟最小的Queue。如果延迟相同,则采用轮询算法投递。


https://www.xamrdz.com/backend/37n1933625.html

相关文章: