RocketMQ架构原理解析(一):整体架构

RocketMQ架构原理解析(二):消息存储(CommitLog)

RocketMQ架构原理解析(三):消息索引(ConsumeQueue & IndexFile)

RocketMQ架构原理解析(四):消息生产端(Producer)

一、概述

RocketMQ作为一个apache的顶级项目,拥有将近16K的star,它稳定的系统及强悍的性能,无疑在国内已经成为了企业消息队列的首选。接下来的一段时间,鄙人准备出一系列文章,从源码出发,逐一剖析RocketMQ的架构设计原理

本文将仅做概念上的陈述

github地址

二、概念及模型

本文中部分概念描述搬运自github官网

RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。其他概念随着行文逐一展开。

图片搬运自官网

2.1 消息生产者(Producer)

负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。同步和异步方式均需要Broker返回确认信息,单向发送不需要。

2.2 消息消费者(Consumer)

负责消费消息,一般是后台系统负责异步消费。一个消息消费者会从Broker服务器拉取消息、并将其提供给应用程序。从用户应用的角度而言提供了两种消费形式:拉取式消费、推动式消费。

2.3 服务器(Broker Server)

消息中转角色,负责存储消息、转发消息。代理服务器在RocketMQ系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。代理服务器也存储消息相关的元数据,包括消费者组、消费进度偏移和主题和队列消息等。

2.3 主题(Topic)

表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。

三、部署架构

图片搬运自官网

RocketMQ各模块启动顺序如下:

  1. 控制中心 启动NameServer,NameServer起来后监听端口,等待Broker、Producer、Consumer连上来,相当于一个路由控制中心
  2. 服务端 Broker启动,跟所有的NameServer保持长连接,定时发送心跳包。心跳包中包含当前Broker信息(IP+端口等)以及存储所有Topic信息。注册成功后,NameServer集群中就有Topic跟Broker的映射关系
  3. 必要环节 收发消息前,先创建Topic,创建Topic时需要指定该Topic要存储在哪些Broker上,也可以在发送消息时自动创建Topic
  4. 客户端1-生产消息 Producer发送消息,启动时先跟NameServer集群中的其中一台建立长连接,并从NameServer中获取当前发送的Topic存在哪些Broker上,轮询从队列列表中选择一个队列,然后与队列所在的Broker建立长连接从而向Broker发消息
  5. 客户端2-消费消息 Consumer跟Producer类似,跟其中一台NameServer建立长连接,获取当前订阅Topic存在哪些Broker上,然后直接跟Broker建立连接通道,开始消费消息

四、消息存储

后文会逐一展开

最新文章

  1. python资料
  2. Lis日常维护
  3. 微信——获取用户基本信息及openid 、access_token、code
  4. MarkDown插入图片
  5. user_jj两条记录改成一条
  6. 文件上传小技巧/原生态【html篇】
  7. iOS开发-友盟分享使用(2)
  8. mysql:on duplicate key update与replace into
  9. 《JavaScript基础教程(第8版)》PDF
  10. mvn命令
  11. Qt HTTP内部构架
  12. SVN的学习以及使用!
  13. SpringMVC中Controller的方法返回值
  14. 基于Java的HashMap和HashSet实现
  15. Django知识总结(三)
  16. 6.7 使用show profile 进行sql分析
  17. css哪些属性可以继承
  18. Java并发程序设计(一) 基础概念
  19. PHP-问题处理Fatal error: Uncaught Error: Call to undefined function simplexml_load_file()
  20. .NET和F#周报第35周-.NET 8月重大更新

热门文章

  1. Vue中this.$router.push(参数) 实现页面跳转
  2. CF808A Lucky Year 题解
  3. JENKINS中创建全局变量并在JOB中使用
  4. Oracle根据约束条件名称查找对应的数据
  5. 【LeetCode】752. Open the Lock 解题报告(Python & C++)
  6. 【剑指Offer】矩阵覆盖 解题报告(Python)
  7. 过河(状态压缩,dp)
  8. 「HAOI 2006」数字序列
  9. IM2603 Type-C扩展坞电源管理 IC
  10. .NET 云原生架构师训练营(组合模式)--学习笔记