当前位置: 首页 > news >正文

RocketMQ分布式消息中间件的核心原理与应用

        传统的同步调用(如 HTTP/RPC)虽然简单直接,但在高并发、高可用场景下容易出现系统耦合度高、性能瓶颈、雪崩效应等问题。

        消息队列通过异步通信削峰填谷,有效解耦系统、提升性能、保障可靠性。Apache RocketMQ 具有高吞吐、低延迟、高可用、金融级可靠性等特性。

一、什么是 RocketMQ?

        RocketMQ 是一个分布式、高吞吐、低延迟、高可用的消息中间件,最初由阿里巴巴开发,后捐赠给 Apache 基金会,成为顶级开源项目。

核心特性:

特性说明
高吞吐单机可支持数十万消息/秒,满足高并发业务场景需求
低延迟消息投递延迟控制在毫秒级,保障实时性要求高的业务响应速度
高可用支持主从复制架构,具备故障自动切换能力,保障服务持续可用
海量消息堆积基于磁盘存储机制,可长时间、大规模堆积消息而不影响系统稳定性
多种消息模式支持发布/订阅、点对点、顺序消息、事务消息、延时消息等,覆盖复杂业务场景
丰富的生态支持提供 Java、C++、Go、Python 等多语言客户端,便于不同技术栈集成与开发

二、RocketMQ 核心概念

理解以下核心概念是使用 RocketMQ 的基础:

1. Producer(生产者)

        负责创建并发送消息到 RocketMQ 服务器。可以是应用程序、服务或定时任务。

2. Consumer(消费者)

        负责从 RocketMQ 服务器订阅并消费消息。消费者可以是多个,实现负载均衡。

3. Topic(主题)

        消息的逻辑分类。生产者将消息发送到指定的 Topic,消费者订阅感兴趣的 Topic。

4. Message(消息)

传输的基本单位,包含:

Topic:消息所属主题。

Tag:消息的二级分类,用于更细粒度的过滤(可选)。

Key:消息的唯一标识,用于幂等处理或快速定位。

Body:消息的实际内容(字节数组)。

Properties:自定义属性。

5. Broker(代理服务器)

        消息中转角色,负责接收 Producer 发送的消息,存储消息,并将消息推送给 Consumer。

是 RocketMQ 的核心服务节点,支持水平扩展。

6. NameServer(注册中心)

        轻量级的服务发现组件,管理 Broker 的路由信息。Producer 和 Consumer 通过 NameServer 获取 Broker 的地址,实现动态发现。

无状态,可集群部署,相互独立。

7. Group(组)

        Producer Group:发送同一类消息的生产者集合。

        Consumer Group:消费同一类消息的消费者集合。

        同一 Consumer Group 内的消费者共同消费一个 Topic,实现负载均衡。

三、RocketMQ 架构图解

工作流程

  1. 启动注册:Broker 启动后,向所有 NameServer 注册自己的路由信息。
  2. 发现路由:Producer 和 Consumer 启动时,从 NameServer 获取 Broker 的地址。
  3. 发送消息:Producer 将消息发送到对应的 Broker。
  4. 存储消息:Broker 将消息持久化到磁盘。
  5. 消费消息:Consumer 从 Broker 拉取消息进行消费。

四、核心消息类型与应用场景

1. 普通消息

        最基本的消息类型,适用于大多数异步解耦场景。

2. 顺序消息

        保证同一消息队列(MessageQueue)内的消息有序消费

        注意:全局有序性能较低,通常使用分区有序

3. 事务消息

        实现最终一致性的分布式事务解决方案。

流程

  1. 生产者发送“半消息”到 Broker。
  2. 执行本地事务。
  3. 根据本地事务结果,向 Broker 提交“提交”或“回滚”指令。
  4. Broker 根据指令决定是否投递消息。

4. 延时消息

        消息发送后,延迟一段时间再投递给消费者。RocketMQ 支持预设的延时等级(如 1s, 5s, 10s, 1m, 2m... 2h)。


五、RocketMQ核心优势

特性RocketMQ 表现说明
性能单机支持数十万级消息吞吐,端到端延迟可控制在毫秒级适用于高并发、低延迟的业务场景
可靠性支持消息持久化到磁盘,提供主从同步机制,刷盘策略可灵活配置保障消息不丢失,满足对数据一致性要求高的场景
功能丰富原生支持普通消息、顺序消息、事务消息、延时消息、消息重试、死信队列等高级特性覆盖绝大多数分布式业务场景,无需二次开发即可满足复杂需求
运维友好提供完善的管理控制台,支持 Topic/Group 管理、消息查询、监控告警等降低运维门槛,提升问题排查与系统可观测性效率
生态兼容官方提供 多语言 SDK;深度集成 Spring Boot、Spring Cloud Stream无缝融入主流技术栈和云原生架构,便于企业快速落地

六、RocketMQ的简单使用

1. 添加依赖

<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.4.2</version>
</dependency>

2. 配置文件

rocketmq:name-server: 127.0.0.1:9876producer:group: my-producer-group

3. 发送消息

@RestController
public class OrderController {@Resourceprivate RocketMQTemplate rocketMQTemplate;@PostMapping("/order")public String createOrder(@RequestBody Order order) {// 发送普通消息rocketMQTemplate.convertAndSend("order_topic", order);return "Order created!";}
}

4. 消费消息

@Component
@RocketMQMessageListener(topic = "order_topic",consumerGroup = "my-consumer-group"
)
public class OrderConsumer implements RocketMQListener<Order> {@Overridepublic void onMessage(Order order) {System.out.println("Received order: " + order.getId());// 处理订单逻辑,如发短信、扣库存}
}


文章转载自:

http://k4rkkrwD.cmfkp.cn
http://FzdQb5wz.cmfkp.cn
http://2DL3wnYT.cmfkp.cn
http://jFiqYiho.cmfkp.cn
http://fc4qTQGb.cmfkp.cn
http://7NzqYIXU.cmfkp.cn
http://sp3OuJgS.cmfkp.cn
http://tZ0aik2X.cmfkp.cn
http://ettUf49x.cmfkp.cn
http://2ALDvOgI.cmfkp.cn
http://Ibt9VUOy.cmfkp.cn
http://9t4fA5DQ.cmfkp.cn
http://u5IbYlEi.cmfkp.cn
http://ALLPzRwN.cmfkp.cn
http://NwR7dDiY.cmfkp.cn
http://VY8knjHc.cmfkp.cn
http://TCfsNSq7.cmfkp.cn
http://tEZXRc7o.cmfkp.cn
http://jMUQyBeC.cmfkp.cn
http://A9Lt4YP0.cmfkp.cn
http://NQ4VxoPr.cmfkp.cn
http://4xiAb0aK.cmfkp.cn
http://E6mstiNV.cmfkp.cn
http://KCerk5iX.cmfkp.cn
http://zHMje8SV.cmfkp.cn
http://JMx4k08I.cmfkp.cn
http://vmrkwudL.cmfkp.cn
http://SaKRey58.cmfkp.cn
http://UyMEL1LY.cmfkp.cn
http://k5rtsk86.cmfkp.cn
http://www.dtcms.com/a/372052.html

相关文章:

  • MySQL 之 InnoDB 存储架构解析
  • 【LeetCode - 每日1题】构造和为0的n个不同整数数组
  • 使用MobaXterm连接Ubuntu时connection refused解决方法
  • Windows 内存整理和优化工具 - Wise Memory Optimize
  • VuePress 与 VitePress 深度对比:特性、差异与选型指南
  • Dockerfile文件常用配置详解
  • Logstash常用插件-ES集群加密
  • NT路径指的是什么?
  • AutoHotkey将脚本编译为exe文件
  • 【Java笔记】单例模式
  • 腕部骨折X光检测识别数据集:2w+图像,6类,yolo标注
  • 当没办法实现从win复制东西到Linux虚拟机时的解决办法
  • AI话术—知识库多次返回播放不同的内容(智能呼叫系统)
  • 【系统架构设计(20)】构件与中间件技术
  • 使用Terraform管理阿里云基础设施
  • 【01】针对开源收银系统icepos (宝塔面板) 详细安装教程详细参考-优雅草卓伊凡
  • python中的“与或非“与vue中的“与或非“
  • c6-类和对象-对象特征-类对象做对象成员
  • 云服务扫盲笔记(2) —— SLS 接入与设置自动化
  • 【算法--链表】109.有序链表转换二叉搜索树--通俗讲解
  • Java 网络编程学习笔记
  • kerberos详解
  • 【数据结构基础习题】-1- 数据结构基本操作
  • OSCP - Proving Grounds - Catto
  • Claude Code 使用指南
  • RabbitMQ 持久化
  • matrix-breakout-2-morpheus靶机渗透
  • 学习结构体
  • Docker 容器 OOM:从资源监控到JVM调优的实战记录
  • TypeORM、Sequelize、Hibernate 的优缺点对比:新手常见 SQL 与 ORM 踩坑总结