首页 > 其他 > 详细

RocketMQ消息发送流程和高可用设计

时间:2019-03-24 18:51:35      阅读:286      评论:0      收藏:0      [点我收藏+]

(源码阅读先看主线 再看支线 先点到为止 后面再详细分解)

高可用的设计就是:当producer发送消息到broker上,broker却宕机,那下一次发送如何避免发送到这个broker上,就是采用LatencyFaultLorent,记录失败/高延迟的broker信息

 MQClientInstanc

 start()

  •  MQClientAPIInstance
  • 定时任务:每隔30s去namesrc更新topicrouteinfo(因为它不能实时得知broker有没有挂掉)
  • 定时任务:每隔2分钟去获取namesrv
  • 心跳:定时向broker 发送心跳信息
  • 定时任务:持久化消费进度
  • 定时任务:动态调整线程池(探究是不是好的实践)
  • 开启拉消息的线程
  • 开启队列负载线程

 producer

send()

超时时间默认3s,发送方式sync,async(发完就走,有回调),oneway(不关注是否成功回调)

  • 尝试获取topic路由信息:从producer缓存好(是由定时拉取namesrv得到的)的路由信息中获取,如果为空,就主动从namesrv更新路由信息
  • 选择一个消息队列发送,然后判断队列是否可用latencyFaultTolerance.isAvailable(根据发送到broker延迟时间决定),如果不可用就下移一个队列
    • 开启高可用
    • 不开启:对队列轮询
  • sendKernel:区分发送模式
    • sync
    • async
    • oneway

 

RocketMQ消息发送流程和高可用设计

原文:https://www.cnblogs.com/hangzhi/p/10589337.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!