一、消息队列核心概念
1.1 基本定义
消息队列(Message Queue)是一种异步通信机制,允许应用通过发送和接收消息进行解耦的交互。消息生产者将消息放入队列,消费者从队列中获取处理,实现系统间的可靠通信。
1.2 核心价值
系统痛点 | 消息队列解决方案 |
---|---|
系统紧耦合 | 解耦生产者和消费者 |
同步调用阻塞 | 异步处理提高响应速度 |
流量突增导致系统崩溃 | 削峰填谷,平衡负载 |
数据丢失风险 | 持久化保证消息可靠传递 |
复杂系统交互 | 简化系统拓扑结构 |
二、核心架构与组件
2.1 基础架构模型
[生产者] → [消息队列] → [消费者]
↑ | ↑
|___________|_____________|
消息确认机制
2.2 关键组件
组件 | 功能说明 |
---|---|
生产者 | 创建并发送消息到指定队列或主题 |
消费者 | 订阅并处理消息,发送确认回执 |
Broker | 消息代理服务器,负责消息存储、路由和传递 |
队列/主题 | 消息的存储目的地(队列:点对点模式,主题:发布订阅模式) |
死信队列 | 存储处理失败或超时的消息 |
三、主流消息队列对比
3.1 技术选型矩阵
特性 | RabbitMQ | Kafka | RocketMQ | ActiveMQ | Pulsar |
---|---|---|---|---|---|
吞吐量 | 万级 | 百万级 | 十万级 | 万级 | 百万级 |
延迟 | 微秒级 | 毫秒级 | 毫秒级 | 毫秒级 | 毫秒级 |
持久化 | 支持 | 支持 | 支持 | 支持 | 支持 |
事务消息 | 支持 | 支持 | 支持 | 支持 | 支持 |
协议支持 | AMQP, STOMP等 | 自定义协议 | 自定义协议 | OpenWire, STOMP | 多协议 |
适用场景 | 企业级消息中间件 | 实时日志流处理 | 金融交易场景 | 传统企业应用 | 多租户云原生场景 |
3.2 典型应用场景
RabbitMQ:
- 订单系统异步处理
- 支付结果通知
- 需要复杂路由的场景
Kafka:
- 用户行为日志收集
- 实时流数据处理
- 事件溯源架构
RocketMQ:
- 电商交易系统
- 金融级消息传递
- 阿里云生态集成
四、Java生态集成示例
4.1 Spring Boot + RabbitMQ
依赖配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
生产者示例:
@RestController
public class MessageController {
@Autowired
private RabbitTemplate rabbitTemplate;
@PostMapping("/send")
public String sendMessage(@RequestBody String message) {
rabbitTemplate.convertAndSend(
"exchange.direct", // 交换机
"routing.key", // 路由键
message); // 消息内容
return "Message sent";
}
}
消费者示例:
@Component
public class