RocketMQ系列2:领域模型和技术概念
1 领域模型
Apache RocketMQ 是一款典型的分布式架构下的消息中间件产品,使用异步通信方式和发布订阅的消息传输模型。 Apache RocketMQ 产品具备异步通信的优势,系统拓扑简单、上下游耦合较弱,主要应用于异步解耦,流量削峰填谷等场景。

说明:以上图片来自官网
如上,RocketMQ 中消息的生命周期主要分为消息生产、消息存储、消息消费这三部分:
- 生产者生产消息并发送至 Apache RocketMQ 服务端
- 消息被存储在服务端的主题中
- 消费者通过订阅主题消费消息
1.1 消息生产
生产者(Producer):RocketMQ 中用于产生消息的运行实体,一般集成于业务调用链路的上游。
1.2 消息存储
- 主题(Topic):RocketMQ 消息传输和存储的分组容器,主题内部由多个队列组成,消息的存储和水平扩展实际是通过主题内的队列实现的。
- 队列(MessageQueue):RocketMQ 消息传输和存储的实际单元容器,类比于其他消息队列中的分区,流式顺序性存储特征。
- 消息(Message): RocketMQ 的最小传输单元。消息具备不可变性,在初始化发送和完成存储后即不可变。
1.3 消息消费
消费者分组(ConsumerGroup):
Apache RocketMQ 发布订阅模型中定义的独立的消费身份分组,用于统一管理底层运行的多个消费者(Consumer)。同一个消费组的多个消费者必须保持消费逻辑和配置一致,共同分担该消费组订阅的消息,实现消费能力的水平扩展。消费者(Consumer):
Apache RocketMQ 消费消息的运行实体,一般集成在业务调用链路的下游。消费者必须被指定到某一个消费组中。订阅关系(Subscription):
Apache RocketMQ 发布订阅模型中消息过滤、重试、消费进度的规则配置。订阅关系以消费组粒度进行管理,消费组通过定义订阅关系控制指定消费组下的消费者如何实现消息过滤、消费重试及消费进度恢复等。
RocketMQ 的订阅关系除过滤表达式之外都是持久化的,即服务端重启或请求断开,订阅关系依然保留。
2 通信方式介绍
分布式系统架构思想下,将复杂系统拆分为多个独立的子模块,例如微服务模块。此时就需要考虑子模块间的远程通信,典型的通信模式分为以下两种,一种是同步的RPC远程调用;一种是基于中间件代理的异步通信方式。
2.1 同步RPC调用模型

同步RPC调用模型下,不同系统之间直接进行调用通信,每个请求直接从调用方发送到被调用方,然后要求被调用方立即返回响应结果给调用方,以确定本次调用结果是否成功。
2.2 异步通信模型

异步消息通信模式下,各子系统之间无需强耦合直接连接,调用方只需要将请求转化成异步事件(消息)发送给中间代理,发送成功即可认为该异步链路调用完成,中间件会确保任务执行完成。他有如下优势:
- 系统拓扑简单:统一的中间代理通信,系统是星型结构,易于维护和管理。
- 上下游解耦 :上下游可以独立升级和变更,不会互相影响。
- 容量削峰填谷:避免高峰带来过载
3 消息传输模型介绍
主流的消息中间件的传输模型主要为点对点模型和发布订阅模型,RocketMQ也不例外。
3.1 对点模式(Point To Point)
在点对点模式下,每个消息只能被一个消费者消费,一旦消息被消费,它就会从队列中删除。这种模式下,消息的生产者和消费者之间没有依赖性,生产者发送消息后,无论是否有消费者接收,都不会影响下一次发送消息。点对点模式适用于需要确保每条消息只被消费一次的场景,例如订单处理、支付确认等。

3.2 发布订阅模式(BroadCast)
在发布订阅模式下,每个消息可以被多个消费者消费。消息生产者将消息发布到主题(Topic)上,所有订阅该主题的消费者都能接收到这条消息。这种模式下,生产者不需要关心有多少消费者,只需要发送消息即可。发布订阅模式适用于需要广播消息给多个消费者的场景,例如实时通知、日志收集等。

3.3 适用场景和优缺点
点对点模式:适用于需要确保每条消息只被消费一次的场景,优点是消息传递可靠,缺点是扩展性较差,不适合大量消费者同时消费的情况。
发布订阅模式:适用于需要广播消息给多个消费者的场景,优点是扩展性好,可以支持大量消费者同时消费,缺点是消息可能会被重复消费,需要额外的机制来处理这种情况。
3.4 实际应用案例
点对点模式:在订单处理系统中,每个订单的创建、支付等操作可以看作是一个独立的消息,确保每个订单的处理过程不会相互影响。
发布订阅模式:在实时通知系统中,当有新的事件发生时,可以将消息发布到主题上,所有订阅该主题的客户端都能实时接收到通知。
通过了解这两种模式的定义、区别和适用场景,可以更好地选择适合自己需求的消息队列模式。
5 总结
了解RockectMQ的基本组成、通信方式、消息传输模型
RocketMQ系列2:领域模型和技术概念的更多相关文章
- RocketMQ系列(一)基本概念
RocketMQ是阿里出品的一款开源的消息中间件,让其声名大噪的就是它的事务消息的功能.在企业中,消息中间件选择使用RocketMQ的还是挺多的,这一系列的文章都是针对RocketMQ的,咱们先从Ro ...
- Intel系列CPU的流水线技术的发展
Intel系列CPU的流水线技术的发展 CPU(Central processing Unit),又称“微处理器(Microprocessor)”,是现代计算机的核心部件.对于PC而言,CPU的规格与 ...
- Hadoop 系列(一)基本概念
Hadoop 系列(一)基本概念 一.Hadoop 简介 Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构,它可以使用户在不了解分布式底层细节的情況下开发分布式程序,充分利用集群 ...
- Storm 系列(一)基本概念
Storm 系列(一)基本概念 Apache Storm(http://storm.apache.org/)是由 Twitter 开源的分布式实时计算系统. Storm 可以非常容易并且可靠地处理无限 ...
- Zookeeper 系列(一)基本概念
Zookeeper 系列(一)基本概念 https://www.cnblogs.com/wuxl360/p/5817471.html 一.分布式协调技术 在给大家介绍 ZooKeeper 之前先来给大 ...
- Hbase 系列(一)基本概念
Hbase 系列(一)基本概念 HBase 是 Apache 旗下一个高可靠性.高性能.面向列.可伸缩的分布式存储系统.利用 HBase 技术可在廉价 PC 服务器上搭建起大规模的存储化集群.使用 H ...
- RocketMQ系列-搭建Namesrv源码调试环境
RocketMQ系列-搭建Namesrv源码调试环境 在学习任何一个技术框架的时候,我们通常都是先了解是什么,有什么作用.解决什么问题.设计亮点和设计思想是什么:当然对于技术学习上来说,这只是纸上谈兵 ...
- 单元测试系列之六:JUnit5 技术前瞻
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6868495.html JUnit ...
- 数据挖掘系列 (1) 关联规则挖掘基本概念与 Aprior 算法
转自:http://www.cnblogs.com/fengfenggirl/p/associate_apriori.html 数据挖掘系列 (1) 关联规则挖掘基本概念与 Aprior 算法 我计划 ...
- 【FICO系列】SAP FICO 基本概念
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FICO系列]SAP FICO 基本概念 ...
随机推荐
- manim边学边做--通用多边形
manim提供了通用多边形模块,可以绘制任意的多边形. 通用多边形模块有两种,Polygon和Polygram. Polygon是一个几何学术语,主要指的是由三条或三条以上的线段首尾顺次连接所组成的平 ...
- JSP——简介-快速入门
JSP 简介 JSP 快速入门 <%@ page contentType="text/html;charset=UTF-8" language=&qu ...
- centos7 nginx+php7yum安装
centos7 nginx+php7yum安装. 一.安装nginx 1.安装yum源 rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/ ...
- 流式dma和一致性dma的区别
流式 DMA(Streaming DMA)和一致性 DMA(Consistent DMA)是两种不同的内存映射模式,用于 DMA(直接内存访问)操作.它们的主要区别在于缓存一致性.性能和使用场景.以下 ...
- Vue 的最大优势是???
Vue 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合.另一方面,当与现代 ...
- (系列七).net8 Aop切面编程
说明 该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发). 该系统文章,我会尽量说的非常详细,做到不管新手.老手都能看懂. 说明:OverallAuth2 ...
- 记一次pip/pip3安装uwsgi报错
背景 本来是想着在centos 7.9的主机上面部署一个flask应用,采用的方式是linux+nginx+uwsgi来进行发布,其他的都没有问题,但是在使用pip安装uwsgi时报错了,安装不成功, ...
- 自建互联网档案馆「GitHub 热点速览」
这两天北京的气温骤降,仿佛在提醒我们冬日的脚步已悄然而至,让人不禁感叹时间的飞逝,一年的时间"转瞬即逝". 如果你想留下互联网上的珍贵瞬间,避免它们消失在 404 错误中.这款开源 ...
- vue之计算属性computed模板
计算属性:故名思意也是一种属性,可以用插值表达式直接调用 废话不多说,直接上代码: 页面部分 <!-- 用户名下拉菜单 --> <el-dropdown class="us ...
- Python-提高-2
阅读目录 1.多继承以及MRO顺序 2.再论静态方法和类方法 3.property属性-讲解 4.property属性-应用 5.魔法属性 6.面向对象设计 7.with与"上下文管理器&q ...