RocketMQ知识点

发布时间:2026/9/24 17:26:40

RocketMQ知识点 ^^《榴芒客服系统》是我们工作室开发的在线客服系统欢迎下载试用《榴芒客服系统》https://blog.csdn.net/look4liming/article/details/164755808RocketMQ是队列式的消息中间件。由Producer、Consumer、Broker、NameServer组成。Productor创建消息Broker存储消息Consumer处理消息。Producer向队列发送消息队列的集合称为Topic。Consumer可以做广播消费或集群消费。做广播消费时一个Consumer消费Topic上的所有队列做集群消费时多个Consumer平均消费Topic上的所有队列保证消息的顺序性。消息消费支持拉取和推送两种模式。MQ推送消息给消费者实际上也是通过拉取的方式实现的。RocketMQ的各组件均可水平扩展。支持主从备份防止数据丢失主节点故障可自动分流到备用节点。支持分布式事务通过两段式提交和回查确保消息发送和数据库变更的最终一致性RabbitMQ和Kafka都不支持。Broker实际上就是一台服务器每个Broker上可以存储多个Topic的消息每个Topic的消息可以分布在多个Broker上。消息队列中存储的是消息的物理地址每个Topic的消息地址存储于多个消息队列上消息队列相当于Topic的分区。NameServer可集群部署NameServer之间不同步任何数据。要先启动NameServer再启动Broker。NameServer是服务注册中心用于管理Broker。Broker启动时把自己注册到NameServerProducer拿着Topic信息到NameServer查询然后和Broker建立连接。NameServer将数据存储在内存中关闭NameServer数据就丢失了。重启NameServer它通过Producer、Broker、Consumer的心跳将集群的元数据信息再重现出来。NameServer负责服务发现和路由寻址为客户端提供Broker列表、Topic和Broker的映射。客户端可以配置多个NameServer这样当某个NameServer不可用时可以切换到其他节点。NameServer不支持强一致性而是关注高可用性和高吞吐量并且可能存在短时的路由信息不一致。NameServer与Broker是保持长连接的每隔30秒检测Broker是否存活Broker不可用时NameServer会从路由注册表中剔除该Broker。Broker用于存储消息接收来自Producer的消息Consumer从这里取得消息。Broker也存储与消息有关的元数据用户组、偏移量、队列等。Broker有两种类型Master、Slave。Master既能写也读Slave是只读的。Master和Slave是一对多的Master和Slave具有相同的Broker name但是BrokerId不同BrokerId为0的是Master非0的是Slave。Broker有4种集群部署方式单Master、多Master、多Master多Slave异步复制、多Master多Slave同步双写。单Master一旦Broker宕机会导致整个服务不可用。多Master所有Broker都是Master没有Slave。单台机器宕机会导致该机器上的消息无法消费消息实时性会受影响。多Master多Slave异步复制每个Master对应一个Slave消息采用异步复制方式主备之间有毫秒级消息延迟。这种方式消息丢失少且消息实时性不会受影响Master 宕机后消费者可以继续从 Slave 消费过程对用户应用程序透明不需要人工干预性能同多 Master 方式几乎一样。缺点是 Master 宕机时在磁盘损坏情况下会丢失极少量消息。多Master多Slave同步双写每个Master对应一个Slave主备都写成功才返回成功。这种方式数据与服务都没有单点问题Master宕机时消息无延迟服务与数据的可用性非常高。相对异步复制方式发送消息的延迟会略高。Producer有三种类型NormalProducer标准生产者用于发送常规消息不保证消息的顺序性或事务性。OrderProducer顺序生产者保证同一主题内消息的顺序性。TransactionProducer事务生产者用于支持分布式事务确保消息发送与本地事务操作的原子性。在消息发送前执行预提交操作并在事务成功或回滚后确认或撤销消息。有3种消息发送方式同步发送、异步发送、单向发送。同步发送发送方发出数据后会在收到接收方发回响应之后才发下一个数据包。一般用于重要通知消息。用于链路耗时较长、对响应时间敏感的业务场景异步发送发出数据后不等接收方发回响应接着发送下个数据包。单向发送只负责发送消息、不等待服务器回应、没有回调用于耗时非常短但对可靠性要求不高的场景如日志收集。Producer Group通常发送一类消息并且发送逻辑一致所以将这些Producer分组在一起。生产者通过Producer Group的名字来标记自己是一个集群。Producer的使用流程启动流程1、初始化创建DefaultMQProducer实例设置生产者组名、NameServer地址等配置。2、连接NameServer生产者会连接到NameServer集群获取Topic的路由信息。3、发送消息生产者根据路由信息选择合适的Broker通过网络通信客户端如Netty发送消息到Broker。4、失败重试如果消息发送失败生产者会根据配置的重试策略进行自动重试。Producer是完全无状态的可集群部署。Producer每隔30秒从NameServer同步一次Topic信息如果有Broker不可用30秒后Producer就能知道但在此期间发往不可用的Broker的消息都会失败。Producer每隔30秒向Broker发送心跳Broker每隔10秒扫描存活的连接如果2分钟内没有收到心跳Broker会断开与Producer的连接。Consumer也称为消息订阅者负责从Broker接收消息、消费消息。Consumer有2种类型推模式消费者、拉模式消费者。推模式下消费者需要设置消息处理的回调函数当新消息到达时RocketMQ会调用这个回调函数来处理消息。Consumer Group将消费同一类消息、消费逻辑一样的Consumer组合成消费者组。同一条消息只能被某一Consumer Group的一个Consumer消费但是可以同时被不同Consumer Group消费。Consumer每隔30秒从NameServer获取Topic信息如果Broker不可用Consumer需要30秒才会知道。Consumer每隔30秒向Broker发送心跳Broker每隔10秒扫描一次连接2分钟内没有回应的连接会被关掉并通知Consumer Group中的所有ConsumerConsumer重新分配队列然后继续消费。如果Consumer发现Master宕机会自动转向Slave因为Slave和Master的数据同步有延迟所以可能会丢失一些消息。等Master恢复运行丢掉的消息最终会被消费。Producer发送消息的流程连接NameServer获取Topic的Broker列表通过负载均衡算法选取一个Broker发送消息Broker将消息存储到CommitLog根据消息的Topic和Queue更新ConsumeQueue如果是事务消息Producer需要完成事务的提交或回滚确保消息最终一致。NameServer与Broker保持长连接每隔30秒检测Broker是否存活超过120秒Broker还是不可达则从路由表中移除该Broker。在集群模式下一条消息只能被一个消费者消费在广播模式下消息会被订阅该Topic的所有消费者消费。消费者消费完一条消息后会向Broker发送ACKBriker根据ACK更新消息位点。消费失败消息通过配置的消费策略进行重试或者进入死信队列。消息Message必须与主题Topic对应。可以给消息设置标签Tag和键值对这个机制允许为消息设置业务key方便在Broker上查找该消息方便开发阶段定位问题。主题Topic是消息的第一级类型。标签Tag是消息的第二级类型消息可以没有Tag。例如Topic是人类则Tag可以是中国人、美国人、俄罗斯人等。主题下可以有多个消息队列Message QueueRocketMQ会轮询主题下的所有消息队列将消息发出去。两种消费模式集群模式Clustering广播模式Broadcasting。默认消费模式是集群模式该模式下一条消息只能被消费者组中某一消费者消费。广播模式下某一消息会被消费者组中的每个消费者消费。两种消息顺序顺序消费并行消费。顺序消费是指消息消费的顺序和消息产生的顺序一致。所以如果业务要求全局顺序消费则主题只能有一个消息队列。并行消费不保证消息顺序。RocketMQ基于主题的发布与订阅模式观察者模式。因为Topic的路由路由信息无需在集群内保持强一致最终一致所以NameServer间无需通信。消息存储在文件组上文件组内每个文件大小固定便于映射到内存。消息顺序写也提高了IO效率队列文件和索引文件方便消费和查找。RocketMQ中消息有可能会被重复消费所以开发者需要自己保证不重复消费消息如幂等消费。Broker Master和Broker Slave主从结构它们之间会执行数据同步。Producer与Broker Master建立长连接只能将消息发送给Broker Master。Consumer与Broker Master和Broker Slave都建立长连接既可以从Broker Master订阅消息也可以从Broker Slave订阅消息。RocketMQ中消息的顺序是分区Queue顺序不是全局顺序。如果主题中只有一个分区且消费者只有一个就能实现全局顺序。消费者可以通过规则只消费某一主题下自己感兴趣的消息这个机制称为消息过滤消息过滤分为服务端过滤和消费端过滤。所有消息主题存储在名为CommitLog的文件中该文件默认大小为1GB达到上限后会生成新文件。每个消息队列有自己的QueueConsume文件存储了CommitLog中消息的偏移量逻辑和物理、消息大小等信息。IndexFile文件支持消息按关键字查询。同步刷盘、异步刷盘。RocketMQ通过消费确认ACK保证消息至少被消费一次因为ACK丢失等异常情况的发生消息可能会被重复消费。对于已消费成功的消息如果需要重新消费可以使用消息回溯机制支持按时间回溯精确到毫秒可以向前或向后回溯。RocketMQ的消息存储文件默认保留3天3天后过期清理。RocketMQ支持消息延迟级别用于定时消费消息。RocketMQ支持消息重试机制。^^《榴芒客服系统》是我们工作室开发的在线客服系统欢迎下载试用《榴芒客服系统》https://blog.csdn.net/look4liming/article/details/164755808
延伸阅读

更多相关文章

2026/9/24 17:21:40

进销存软件排行榜:2026年10款主流软件横评与选型

摘要:进销存软件用得对不对,直接影响开单、库存和对账效率。本文按开单顺不顺、库存准不准、对账清不清、价格合不合理四件事,横评10款主流产品,并给出不同业态的选型建议和上手四步。一、进销存排行榜是怎么排的?先看…

2026/9/24 18:21:44

Spring Boot后端项目部署实战:从解压到联调的全流程指南

简介:期刊出版数字化要求后端系统高效组织数据与业务逻辑。这份资源正是一套面向初中级开发者的期刊管理后端实现,适合用来学习API设计、数据库建模与权限控制。资源围绕期刊、文章、作者、审稿人等核心实体,以Python提供app入口、rpc远程调用…

2026/9/24 18:21:44

AI创业公司云平台选型指南:算力、成本与防锁定策略

这两年我经常被VC朋友问同一个问题:手上投了十几家AI公司,每家都在问云平台怎么选,能不能直接给个清单?说实话,这个问题没有标准答案,但问的人多了,我发现大家踩过的坑高度重合。今天这篇就从技…

2026/9/24 18:21:44

Win11网线直连传大文件:“输入网络凭据”问题全解析

1. 为什么网线直连才是最稳的文件传输方式先说个场景:两台电脑都需要互传大量文件,一个大活儿是几十 GB 的设计稿、视频素材或者虚拟机镜像。用 U 盘倒腾来回拔插累得够呛,走微信、网盘传大文件要么限速要么压缩画质,内网 WiFi 传…

2026/9/24 18:21:44

从COCO到YOLO:雨雪路面数据集训练全流程与避坑指南

简介:雨雪天气路面状况识别是自动驾驶与智能交通中的常见难点,这份数据集专门面向结冰路面、雪地、下雨湿滑、干燥路面四类场景,图片均为原始拍摄图像,并使用COCO格式进行目标标记,可直接用于目标检测、语义分割等模型…

2026/9/24 18:16:44

Java火车票系统实战:解决超卖、事务隔离与订单唯一性

简介:这是一套面向Java初学者与数据库课程实践者的火车票售票系统完整源码,基于Java Swing界面与Access数据库(.mdb文件)实现,解决小型票务场景下的车次管理、余票查询、在线售票与退票等核心业务需求。资源共89个文件…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/24 0:00:21

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:21

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:21

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码