zoukankan      html  css  js  c++  java
  • RocketMQ消息发送流程和高可用设计

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

    高可用的设计就是:当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
  • 相关阅读:
    二级菜单jquery
    js二级导航
    append appendChild appendTo区别
    cssText在 IE6/7/8和chrome/Firefox/IE9+的不同
    cssText
    css slice和splice
    js字符串函数之substring() substr()
    js字符串函数之split()join()
    Python面向对象之:三大特性:继承,封装,多态以及类的约束
    Python3 面向对象之:多继承
  • 原文地址:https://www.cnblogs.com/hangzhi/p/10589337.html
Copyright © 2011-2022 走看看