前言
如果你写过 Spring Boot 项目,你大概率用过 @EventListener 或消息队列。但"用消息队列"和"事件驱动架构"是两回事。事件驱动架构(Event-Driven Architecture, EDA)是一种架构风格,不只是技术选型。
本文带你从"为什么需要事件驱动"开始,理解三种事件模式、Command vs Event 的本质区别,再到实战落地。
第一部分:什么是事件驱动架构
1.1 一个简单的对比
传统请求-响应模式(你每天都在写的):
大约 14 分钟
如果你写过 Spring Boot 项目,你大概率用过 @EventListener 或消息队列。但"用消息队列"和"事件驱动架构"是两回事。事件驱动架构(Event-Driven Architecture, EDA)是一种架构风格,不只是技术选型。
本文带你从"为什么需要事件驱动"开始,理解三种事件模式、Command vs Event 的本质区别,再到实战落地。
传统请求-响应模式(你每天都在写的):
金融系统对消息中间件有三个核心要求:不能丢、不能乱、能回溯。RocketMQ 正是为满足这些要求而设计的。本文以担保业务为实战案例,讲解如何用 RocketMQ 构建可靠的消息系统。
| 维度 | RocketMQ | Kafka | 金融选型考量 |
|---|---|---|---|
| 事务消息 | 原生支持 | 0.11+支持但复杂 | ★★★ RocketMQ 胜 |
| 顺序消息 | 全局+分区顺序 | 仅分区内顺序 | ★★ RocketMQ 胜 |
| 延迟消息 | 18个内置级别 | 不原生支持 | ★★ RocketMQ 胜 |
| 消息回溯 | 按时间秒级回溯 | 支持但运维复杂 | ★ RocketMQ 胜 |
| 堆积能力 | 亿级消息堆积 | 依赖磁盘容量 | 持平 |
| 社区背景 | 阿里/蚂蚁金融场景 | 大数据/日志 | ★ RocketMQ 更匹配 |
"用哪个消息队列?"——这是每个架构师都必须回答的问题。答案是:看场景。Kafka 适合大数据,RocketMQ 适合金融交易,RabbitMQ 适合复杂路由,Pulsar 适合多租户。本文帮你建立选型决策框架。
| 特性 | Kafka | RocketMQ | RabbitMQ | Pulsar |
|---|---|---|---|---|
| 开发语言 | Java/Scala | Java | Erlang | Java |
| 所属 | Apache | Apache(阿里) | VMware | Apache |
| 协议 | 自有协议 | 自有协议 | AMQP 0-9-1 | 自有协议 |
| 吞吐量 | ★★★★★ | ★★★★☆ | ★★★☆☆ | ★★★★★ |
| 低延迟 | ★★★☆☆ | ★★★★☆ | ★★★★★ | ★★★★☆ |
| 消息持久化 | ★★★★★ | ★★★★★ | ★★★☆☆ | ★★★★★ |
| 事务消息 | ★★★★☆ | ★★★★★ | ★★★★☆ | ★★★★★ |
| 顺序消息 | ★★★☆☆ | ★★★★★ | ★★★☆☆ | ★★★★☆ |
| 延迟消息 | ☆ | ★★★★★ | ★★★☆☆ | ★★★★☆ |
| 消息回溯 | ★★★★★ | ★★★★★ | ☆ | ★★★★★ |
| 运维复杂度 | ★★★☆☆ | ★★★☆☆ | ★★☆☆☆ | ★★★★☆ |