美文网首页
RocketMq 消息生产过程

RocketMq 消息生产过程

作者: 半山腰烤苞米 | 来源:发表于2022-05-05 22:29 被阅读0次

Name Server :简单理解 注册中心  NameServer集群,各节点间相互不进行信息通讯

Broker :MQ实列 (负责存储消息,转发消息。存储元数据,包括消费者组,进度偏移offset,topic queue等)

Producer在发送消息时可以将消息写入到指定topic的某Broker中的某Queue中,其经历了如下过程:

Producer发送消息之前,会先向NameServer发出获取消息Topic的路由信息的请求

NameServer返回该Topic的路由表Broker列表

Producer根据代码中指定的Queue选择策略,从Queue列表中选出一个队列,用于后续存储消息

Produer对消息做一些特殊处理,例如,消息本身超过4M,则会对其进行压缩

Producer向选择出的Queue所在的Broker发出RPC请求,将消息发送到选择出的Queue

QueueData

nameServer维护的路由表,实际是一个MapkeyTopic名称,value是一个QueueData实例集合

而一个QueueData则包含一个Broker实例的所有此topic的Queue信息

即一个Broker对应一个QueueData。QueueData中包含brokerName

简单来说,路由表的keyTopic名称,value则为所有涉及该Topic的 BrokerName列表

路由表: 是一个map  key 是 topic  value  QueueData实列列表。

{

    "TopicTest":[

        {

            "brokerName":"broker-a",

            "perm":6,

            "readQueueNums":4,

            "topicSynFlag":0,

            "writeQueueNums":4

        }

    ]}

那根据Topic可以获取到BrokerName,怎么由BrokerName获取到对应的连接地址信息呢

Broker列表:

其实际也是一个MapkeybrokerNamevalueBrokerData

一个BrokerData对应一套brokerName名称相同的Master-Slave小集群

BrokerData中包含brokerName及一个map。该map的key为brokerId,value为该

broker对应的地址。brokerId0表示该brokerMaster,非0表示Slave

{

    "broker-a":{

        "brokerAddrs":{

            "0":"172.16.62.75:10911  

        },

        "brokerName":"broker-a",

        "cluster":"DefaultCluster"

    }}

相关文章

网友评论

      本文标题:RocketMq 消息生产过程

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