【RocketMQ系列一】初识RocketMQ
您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
😁 2. 毕业设计专栏,毕业季咱们不慌忙,几百款毕业设计等你选。
❤️ 3. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当 。python爬虫入门进阶
❤️ 4. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 5. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
文章目录
- 1、消息队列
- 2、消息队列的应用场景
- 3、RocketMQ的简介
- 4、各类MQ的对比
- 5、RocketMQ的技术架构
- 6、RockerMQ领域模型
- 1. 消息生产
- 2. 消息存储
- 3. 消息消费
- 参考
1、消息队列
消息队列(Message Queue,下面简称MQ) 是一种用于分布式系统中各节点之间进行消息传输的,独立于平台的软件系统。如果把分布式系统中的各个节点比喻成商家和顾客的话,那么消息中间件就是快递公司。商家(生产者)将快递(消息)投递给快递公司,快递公司负责运送快递给顾客(消费者)。那么在分布式系统架构中为啥要用消息中间件呢?
2、消息队列的应用场景
消息队列在分布式系统中主要用于异步解耦,流量削峰等场景。就以订单流程为例。没有使用消息队列的情况下,用户下单,需要订单系统调用商品系统扣减库存,调用积分系统发放积分,调用优惠券系统抵扣优惠券。这几个系统都与订单系统耦合在一块了。任意一个系统的失败都可能导致下单失败。

使用消息队列之后,订单系统只需要发送一条消息,商品系统,积分系统,优惠券系统直接订阅订单系统发送的消息即可。

3、RocketMQ的简介
RocketMQ是阿里巴巴开源的一款消息队列,它具有低延迟,高吞吐量,高可靠性等特点。目前,RocketMQ在阿里巴巴内部有着广泛的应用,经历多次双十一的洗礼,RocketMQ的可靠性非常高。
4、各类MQ的对比
目前市面上常用的MQ有: kafka, RabbitMQ,RocketMQ,ActiveMQ。这四种MQ的主要对比如下图所示:
| 名称 | RabbitMQ | ActiveMQ | RocketMQ | kafka |
|---|---|---|---|---|
| 开发语言 | Erlang | Java | Java | Scala&Java |
| 客户端支持语言 | 支持,JAVA优先 | 语言无关 | 只支持JAVA | 支持,JAVA优先 |
| 单机吞吐量 | 其次(万级) | 最差(万级) | 最高(十万级) | 次之(十万级) |
| 消息延迟 | 微秒级 | \ | 比kafka快 | 毫秒级 |
| 数据可靠性 | 可以保证数据不丢失,有slave用作备份 | master/slave | 支持异步实时刷盘,同步刷盘,同步复制,异步复制 | 数据可靠,并且有副本机制,有容错容灾能力 |
| HA | master/slave模式,master提供服务,slave仅作备份 | 基于Zookeeper+LevelDB的Master-Slave实现方式 | 支持多Master模式,多Master多Slave模式,异步复制模式, | 支持replica机制,leader宕机后,备份自动顶替,并重新选举leader(基于zookeeper) |
| 消息推拉模式 | 多协议,Pull/Push均有支持 | 多协议,Pull/Push均有支持 | 多协议,Pull/Push均有支持 | Pull |
| 成熟度 | 成熟 | 成熟 | 比较成熟 | 成熟 |
| 特点 | ||||
| 支持协议 | 多协议支持:AMQP,XMPP,SMTP,STOMP | 自有协议 | 自有协议,社区封装了HTTP协议支持 | |
| 持久化 | 内存,文件,支持数据堆积,但数据堆积会影响生产速率 | 内存,文件,数据库 | 磁盘文件 | 磁盘文件,只要做到 |
| 事务 | 不支持 | 支持 | 支持 | 不支持,但可以通过Low Level API保证只消费一次 |
| 负载均衡 | 支持 | 支持 | 支持 | 支持 |
| 集群 | 支持 | 支持 | 支持 | 支持 |
| 评价 | 优点:由于Erlang语言的特性,mq性能较好,管理界面丰富,在互联网公司也有大规模应用;支持amqp。 缺点:erlang语言难度较大,集群不支持动态扩展。 | 优点:成熟的产品,已经在很多公司得到应用。缺点:社区不活跃,会出现莫名其妙的问题,且会丢失消息 | 优点:模型简单。在阿里大规模应用,单日处理消息上百亿。 |
综上所述:
早期的话ActiveMQ使用比较多,但是ActiveMQ没有经历过大吞吐量场景的验证,且可能会丢失消息,社区也不活跃,现在应用的比较少了。
RabbitMQ 得益于其活跃的开源社区以及高可用性被不少公司应用。但是Erlang语言阻止了大量的java开发工程师去深入研究和掌握它,对公司而言,几乎处于不可控的状态。
RocketMQ 作为经历过双十一大吞吐量场景的考验,Java语言开发的消息队列,现在被越来越多的公司采用。RocketMQ也已经捐给了Apache 基金会,社区较为活跃。
kafka主要应用于日志收集场景。
如果系统使用消息队列主要场景是处理在线业务,比如在交易系统中用消息队列传递订单,需要低延迟和高稳定性,建议使用 RocketMQ。
如果需要处理海量的消息,像收集日志、监控信息或是埋点这类数据,或是你的应用场景大量使用了大数据、流计算相关的开源产品,那 Kafka 是最适合的消息队列。
5、RocketMQ的技术架构

RockerMQ架构上主要分为四部分, 如上图所示:
-
Producer: 消息生产者角色,支持分布式集群部署,主要用于发送消息,通常集成于业务系统。它相当于是发信者。
-
Consumer: 消息消费者角色,支持分布式集群部署,支持以push推,pull拉两种模式对消息进行消费。同时也支持集群方式和广播方式的消费,通常集成于业务系统。它相当于收信者。
-
Broker: 主要负责消息的存储、投递和查询以及服务高可用保证。它相当于是邮局 其内部包含以下几个重要子模块。
4.1. Remoting Module: 整个Broker的实体,负责处理来自Clients端的请求。
4.2. Client Manager: 负责管理客户端(Producer/Consumer)和维护Topic订阅信息。
4.3. Store Service: 提供方便简单的API接口处理消息存储到物理磁盘和查询功能。
-
NameServer: 它是Broker的注册中心,支持Broker的动态注册与发现。它主要包括两个功能:Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的提供者。然后提供心跳检测机制,检查Broker是否存活;路由信息管理,每个NameServer通常也是集群方式部署,各实例互不进行通信,Broker向每一台NameServer注册自己的路由信息, 所以,每一个NameServer实例上面都保存一份完整的路由信息,当某个NameServer因某种原因下线了,Broker仍然可以向其他NameServer同步其路由信息。NameServer是无状态的。
6、RockerMQ领域模型

如上图所示,RocketMQ中消息的生命周期主要分为消息生产、消息存储、消息消费这三部分。
生产者生产消息并发送到RocketMQ服务端,消息被存储到服务端的主题中,消费者通过订阅主题消费消息。
1. 消息生产
生产者(Producer):用于产生消息的运行实体,一般集成于业务调用链路的上游。生产者是轻量级匿名无身份的。
2. 消息存储
-
主题(Topic):
RocketMQ 消息传输和存储的分组容器,主题内部由多个队列组成,消息的存储和水平扩展实际是通过主题内的队列实现的。
-
队列(MessageQueue):
RocketMQ 消息传输和存储的实际单元容器,类比于其他消息队列中的分区。RocketMQ 通过流式特性的无限队列结构来存储消息,消息在队列内具有顺序存储特性。
-
消息(Message):
RocketMQ 的最小传输单元,消息具备不可变性,在初始化发送和完成存储后即不可变。
3. 消息消费
-
消费者分组(ConsumerGroup):
RocketMQ发布订阅模型中定义的独立的消费身份分组。用于统一管理底层运行的多个消费者(Consumer)。同一个消费者组的多个消费者必须保持消费逻辑和配置一致,共同分担该消费者组订阅的消息,实现消费能力的水平扩展。
-
消费者(Consumer):
RocketMQ 消费消息的运行实体,一般集成在业务调用链路的下游。消费者必须指定到某一个消费者组中。
-
订阅关系(Subscription):
RocketMQ 发布订阅模型中消息过滤、重试、消费进度的规则配置。订阅关系以消费组粒度进行管理,消费组通过定义订阅关系控制指定消费组下的消费者如何实现消息过滤、消费重试及消费进度恢复等。RocketMQ 的订阅关系除过滤表达式之外都是持久化的,即服务端重启或请求断开,订阅关系依然保留。
参考
领域模型概述
千锋教育RocketMQ全套视频教程,快速掌握MQ消息中间件
相关文章:
【RocketMQ系列一】初识RocketMQ
您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精…...
【06】基础知识:React组件实例三大核心属性 - ref
一、 ref 了解 理解 组件内的标签可以定义 ref 属性来标识自己 使用 1、字符串形式的 ref 定义:<input ref"input"/> 获取:this.refs.input2、回调形式的 ref 定义:<input ref{currentNode > this.input curren…...
Bootstrap-媒体类型
加上媒体查询之后,只有在特定的设备之下才能起作用!!!...
spring Cloud笔记--服务治理Eureka
服务治理:Eureka 服务治理 主要用来实现各个微服务实例的自动化注册与发现 服务注册: 服务治理框架中,通常会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号,版本号&#x…...
pdf压缩文件怎么压缩最小?pdf压缩方法汇总
PDF是一种常见的文件格式,通常用于电子文档和印刷品,由于PDF文件通常包含大量的元数据、字体、图像和其他元素,因此它们的大小可能会非常大。 为了解决这个问题,我们可以使用一些PDF压缩工具来帮助我们,以便我们能够更…...
Golang学习记录:基础篇练习(一)
Golang学习记录:基础篇练习(一) 1、九九乘法表2、水仙花数3、斐波那契数列4、编写一个函数,求100以内的质数5、统计字符串里面的字母、数字、空格以及其他字符的个数6、二维数组对角线的和7、冒泡排序算法8、选择排序算法9、二分查…...
sql注入(7), python 实现盲注爆破数据库名, 表名, 列名
python 实现盲注 该python脚本根据之前介绍的盲注原理实现, 对于发送的注入请求没有做等待间隔, 可能给目标服务器造成一定 压力, 所以仅限于本地测试使用. import requests, time# 时间型盲注 def time_blind(base_url, cookie):for length in range(1, 20): # 测试数据库名…...
2021年12月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
Python编程(1~6级)全部真题・点这里 C/C编程(1~8级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 执行以下程序 a[33,55,22,77] a.sort() for i in a:print(i)运行…...
卡尔曼家族从零解剖-(01)预备知识点
讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的 卡尔曼家族从零解剖 链接 :卡尔曼家族从零解剖-(00)目录最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/133846882 文末正下方中心提供了本人 联系…...
技术分享| 二进制部署MySQL
一、介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System&#x…...
3.1 模板测试与深度测试(Stencil Test Z Test)
一、模板测试(Stencil Test) 模板测试可以实现的一些效果图 1.是什么 ①从渲染管线出发:模板测试是在逐片源操作阶段,透明测试之后,深度测试之前的位置。 ②从书面概念上理解 说到模板测试,就要先说道模…...
一些常见的必须会的谭浩强基本代码大全也是常考的应试是没问题的
//1. 1£¡+2£¡+3£¡+...20! /* #include <stdio.h> int main() {int i;long sum=0,k=1;for(i=1;i<=20;i++){k*=i;sum+=k;}printf("%d",sum); } *///方法2 /* #include <stdio.h> int main() {int i,j;long sum=0,k;for(i…...
C语言天花板——指针(进阶1)
接上次的指针初阶(http://t.csdnimg.cn/oox5s),这次我们继续的探寻指针的奥秘,发车咯!!!🚗🚗🚗 一、字符指针 可以看到我们将指针p给打印出来,就是…...
二、深度测试(Z Test)
1.是什么 ①从渲染管线出发 ②书面上理解 所谓深度测试,就是针对当前对象在屏幕上(更准确的说是frame buffer)对应的像素点,讲对象自身的深度值与当前该像素点缓存的深度值进行比较,如果通过了,本对象再改…...
Vue_Bug VUE-ADMIN-TEMPLATE-MASTER electron build后无法登录
Bug描述: VUE-ADMIN-TEMPLATE-MASTER 项目在经过 electron 的 build 命令后,无法登录 问题原因: 大部分vue 前段项目 会使用 js-cookie 这个库 来操作浏览器的cookie 然而这个库 在electron下 会无法使用 (最坑的是还没报错&…...
睡衣内衣服装商城小程序的作用是什么
服装行业一直都是市场很重要的组成部分,每个人都需要,且根据品牌、样式作用等可以细分很多类目,其中睡衣内衣也有不小的市场规模,从业商家多、市场需求度高。 但同时睡衣内衣经营痛点也比较明显。 当今消费者习惯于线上消费&…...
idea怎么设置作者信息(详细)
目录 一:在Java类的开头自动注释作者名字和日期等信息 二:给Java的方法注释作者名字和日期等信息 1. 不可修改的模板:Postfix Completion 2. 可修改的模板:Live Templates tips:首先给大家推荐两款好用的免费软件&…...
产品经理如何有效跟进开发进度?
作为产品经理,很难跟进开发过程。随着软件开发的复杂性和不断变化的产品环境,产品经理必须保持在开发过程的顶端,并确保目标得到满足。产品经理如何跟进开发进度? 第一步是对开发过程本身有一个扎实的理解。产品经理必须熟悉开发过…...
【已解决】Qt无法追踪到mouse移动事件
本博文源于笔者正在亲身经历的Qt无法追踪到鼠标移动事件。事情是这样的,笔者有一个应用程序,当应用程序移动进窗口里的时候,每移动一下,检测鼠标位置,进而调整鼠标的形状,结果发现它这死活不听话。后来解决…...
Dubbo从0到1——万字完整学习笔记
目录 RPC理论概述 RPC的基本思想 RPC的实现组成部分 RPC的实现流程 RPC的核心思想 RPC调用分类 初识Dubbo Dubbo特性 Dubbo设计架构 zookeeper环境搭建 搭建注册中心环境 搭建监控中心环境 Dubbo入门案例(Dubbo Spring) 实现步骤 搭建中介者组件共享资源 打包为jar…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
