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
  • 相关阅读:
    Docker搭建持续集成平台Jenkins
    Selenium Webdriver 架构
    JMeter性能监控系统:Jmeter + InfluxDB + Grafana
    持续集成平台Jenkins配置方法介绍
    perl中的map
    Smarty 配置文件中的相对路径
    挑出IIS日志里某一文件的请求次数
    写PHP,内伤中....
    File::Find
    强制删除删除不了的文件
  • 原文地址:https://www.cnblogs.com/hangzhi/p/10589337.html
Copyright © 2011-2022 走看看