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

RocketMQ是什么?

RocketMQ 是一款由阿里巴巴开源的分布式消息中间件(后捐赠给 Apache 基金会,成为顶级项目),专为高并发、高可靠、低延迟的金融级场景设计。以下是其核心解析:


一、核心定位

  • 本质:分布式发布-订阅消息系统
  • 目标:解决大规模分布式系统中的异步通信、流量削峰、数据解耦问题
  • 标杆场景:双11万亿级交易洪峰(单日消息量超万亿条)

二、核心架构

Push 消息
路由发现
同步
存储
Pull 消息
Producer
NameServer
Broker-Master
Broker-Slave
CommitLog
Consumer
  1. NameServer

    • 轻量级服务发现中心(无状态)
    • 管理所有 Broker 的路由信息(类似 Kafka 的 ZooKeeper,但更轻量)
  2. Broker

    • 消息存储与转发节点
    • 主从架构:Master 处理读写,Slave 热备(支持同步/异步复制)
  3. CommitLog

    • 创新设计:所有消息顺序写入同一个物理文件(类似日志合并)
    • 大幅提升磁盘 I/O 效率(对比 Kafka 的分区存储)

三、核心特性

特性说明业务价值
事务消息二阶段提交(半消息+本地事务执行)保证分布式事务最终一致性
顺序消息同一队列(Queue)内严格 FIFO支付、订单状态变更等有序场景
延时消息18 个预定义延时等级(1s~2h)订单超时关闭、定时任务
消息过滤支持 Tag/SQL92 语法过滤精准投递降低消费者压力
堆积能力单机万亿级消息堆积(依赖磁盘容量)抗突发流量
高可用多副本机制(Dledger 选主)金融级可靠性(99.9999% SLA)
轨迹追踪消息生产/消费全链路追踪快速定位消息丢失问题

四、适用场景

  1. 金融支付

    • 场景:支付状态同步(保证扣款与订单状态变更顺序性)
    • 关键:事务消息 + 顺序消息
  2. 电商大促

    • 场景:秒杀订单洪峰缓冲
    • 关键:百万级 TPS + 消息堆积能力
  3. 实时数仓

    • 场景:MySQL Binlog 同步到 HBase
    • 关键:低延迟 + 高吞吐(替代 Canal)
  4. 物联网(IoT)

    • 场景:百万设备指令下发
    • 关键:海量 Topic 支持 + 消息过滤

**五、代码示例(生产者 & 消费者)

1. 生产者(同步发送)

@RestController
public class ProducerController {@Autowiredprivate RocketMQTemplate rocketMQTemplate;@GetMapping("/send")public String send(String msg) {// 发送同步消息(重要业务需确认送达)SendResult result = rocketMQTemplate.syncSend("test-topic", MessageBuilder.withPayload(msg).build());return "MsgId: " + result.getMsgId();}
}

2. 消费者(并发消费)

@Service
@RocketMQMessageListener(topic = "test-topic", consumerGroup = "test-group",consumeMode = ConsumeMode.CONCURRENTLY  // 并发模式
)
public class ConsumerService implements RocketMQListener<String> {@Overridepublic void onMessage(String message) {System.out.println("Received: " + message);}
}

六、与同类对比

能力RocketMQKafkaRabbitMQ
事务消息✅ 完整支持❌ 不支持❌ 不支持
消息延迟✅ 预定义等级❌ 需外部调度✅ 灵活 TTL
消费模式Pull/Push 混合PullPush
顺序保证✅ 队列级严格有序✅ 分区内有序❌ 无保证
运维复杂度中等高(需 ZooKeeper)

七、局限性

  1. 命名限制

    • Topic/Group 名长度 ≤ 255 字符(Kafka 无此限制)
  2. 延迟精度

    • 固定延迟等级(不支持任意时间精度)
  3. 生态工具

    • 监控工具不如 Kafka 成熟(需依赖 RocketMQ-Exporter + Grafana)

总结

RocketMQ 是面向金融场景的工业级消息中间件,核心优势在于:

  • 💪 事务消息严格顺序保障数据一致性
  • 🚀 万亿级堆积能力应对流量洪峰
  • ⚙️ 轻量级架构(NameServer)降低运维复杂度

选型建议

  • 金融/电商 → RocketMQ
    日志/大数据 → Kafka
    轻量级应用 → RabbitMQ
http://www.dtcms.com/a/337220.html

相关文章:

  • Day7--滑动窗口与双指针--1695. 删除子数组的最大得分,2958. 最多 K 个重复元素的最长子数组,2024. 考试的最大困扰度
  • 消息队列中的推模式与拉模式
  • C++/Java双平台表单校验实战:合法性+长度+防重复+Tab顺序四重守卫
  • 【从0开始学习Java | 第14篇】集合(上)
  • Day8--滑动窗口与双指针--1004. 最大连续1的个数 III,1658. 将 x 减到 0 的最小操作数,3641. 最长半重复子数组
  • 考问通系统测试分析报告
  • Golang 语言中的指针操作
  • Android中使用RxJava实现网络请求与缓存策略
  • 实习两个月总结
  • 通义万相Wan2.1- 阿里推出的开源视频生成大模型
  • 从哲学(业务)视角看待数据挖掘:从认知到实践的螺旋上升
  • Elasticsearch查询中的track_total_hits参数
  • 【网络安全实验报告】实验五:网络嗅探及安全性分析
  • 在阿里云 CentOS Stream 9 64位 UEFI 版上离线安装 Docker Compose
  • CentOS 7更换国内镜像源
  • CentOS 7安装OpenVASGVM指南
  • 国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—ARM + DSP、RISC-V核间通信开发案例
  • [数据结构] ArrayList 与 顺序表
  • OVS:ovn为什么默认选择Geneve作为二层隧道网络协议?
  • 【Day 30】Linux-Mysql数据库
  • 大数据计算引擎(三)——Elasticsearch入门
  • uart串口 day57
  • 产品经理如何提升职场学习能力?破除成长瓶颈
  • Vue+Flask 电影协同推荐可视化平台 前后端分离 大数据分析
  • Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
  • 05.用户和组管理命令
  • 【机器学习】FPR(False Positive Rate,误报率)是什么?
  • Zephyr下ESP32S3开发环境搭建(Linux篇)
  • 深度研究系统、方法与应用的综述
  • Transformer架构的编码器和解码器介绍