RocketMQ源码学习(一)-概述

为何选择读RocketMQ?

对MQ的理解一直不深,上周看了<Java消息服务>,仍是以为不够深刻,找个成熟的产品来学习吧,RabbitMQ是erLang写的,Kafka是Scala写的,非Java写的看起来还须要补充不少知识,ActiveMQ虽然是Java,可是各方面略显老旧,最终选择了RocketMQ(4.1.0-incubating release)来学习.服务器

吐槽下RocketMQ

   做为阿里巴巴捐给Apache的项目,官网上有用的资源太少了,处处都只说性能的数据,还有简单例子,详细的使用文档居然没有了,怪不得没有kafka流行呢,dubbo的文档都比这强不少,话说开源产品不是摆来看和吹牛的,让更多的人方便使用起来才是开源的核心思想吧,另外源码中的注释也实在太少了,还不如我司的项目的注释齐全呢,跟JDK,Spring比起来差太多了,不过好在名字起的不错,编码也规范,看起来还能继续下去.架构

概览

部署架构图
如图所示RocketMQ的使用由命名服务,生产者,消费者,中转服务器组成.性能

  • Name Server 是一个几乎无状态节点,可集群部署,节点之间无任何信息同步学习

  • Broker 部署相对复杂,Broker 分为 Master 与 Slave,一个 Master 能够对应多个 Slave,可是一个 Slave 只能对应一个 Master,Master 与 Slave 的对应关系经过指定相同的 BrokerName,不一样的 BrokerId 来定义,BrokerId为 0 表示 Master,非 0 表示 Slave。Master 也能够部署多个。每一个 Broker 与 Name Server 集群中的全部节点创建长链接,定时注册 Topic 信息到全部 Name Server。编码

  • Producer 与 Name Server 集群中的其中一个节点(随机选择)创建长链接,按期从 Name Server 取 Topic 路由信息,并向提供 Topic 服务的 Master 创建长链接,且定时向 Master 发送心跳。Producer 彻底无状态,可
    集群部署。spa

  • Consumer 与 Name Server 集群中的其中一个节点(随机选择)创建长链接,按期从 Name Server 取 Topic 路
    由信息,并向提供 Topic 服务的 Master、Slave 创建长链接,且定时向 Master、Slave 发送心跳。Consumer 既能够从 Master 订阅消息,也能够从 Slave 订阅消息,订阅规则由 Broker 配置决定。3d

本系列源码解析主要参照<RocketMQ 原理简介>来追寻其代码实现,虽然版本不太一致,但这也是能找到的最详细的资料了.接下来根据其模块来源码阅读
目录以下:
1. Name Server
2. Producer
3. Broker
4. Consumerblog

相关文章
相关标签/搜索