核心概念
Producer、Exchange、Queue、Binding、Consumer。
30 分钟
核心概念
RabbitMQ 遵循 AMQP 0-9-1:消息不直接进 Queue,而是先经 Exchange 按规则路由。弄清 Producer、Exchange、Binding、Queue、Consumer 五元关系,后面 Spring AMQP 与可靠性配置才看得懂。
学习目标
- 画出消息从发布到 ack 的完整路径
- 理解 routing key、binding key、virtual host
- 知道 Channel 与 Connection 的分工
核心内容
组件关系
Producer --(routing key)--> Exchange --(binding)--> Queue --> Consumer
^ ^
不存消息 存消息直到 ack
- Virtual Host (
/):逻辑隔离,类似数据库 schema - Exchange:只路由,默认不持久化消息体
- Queue:缓冲;可 durable,配合持久化消息防重启丢单
- Binding:Exchange 与 Queue 的匹配规则(含 routing key / headers)
- Consumer:
basicConsume拉取或推送;manual ack 后才从队列删除
Java 客户端(概念)
依赖 com.rabbitmq:amqp-client;Spring 项目通常直接用 Spring AMQP(rmq-spring)。
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
try (Connection conn = factory.newConnection();
Channel channel = conn.createChannel()) {
channel.queueDeclare("coderoadmap.tasks", true, false, false, null);
channel.basicPublish("", "coderoadmap.tasks",
MessageProperties.PERSISTENT_TEXT_PLAIN,
"export:lesson-42".getBytes(StandardCharsets.UTF_8));
}
空字符串 Exchange 表示 default exchange:routing key 等于 queue 名时直投该队列。复杂路由见 rmq-exchanges。
与 Kafka 名词对照
| RabbitMQ | Kafka 近似 |
|---|---|
| Queue | Topic 分区上的消费进度 |
| Exchange + Binding | Topic 订阅 / 过滤 |
| Consumer ack | offset commit |
| routing key | message key |
Kafka 消费进度在 Broker 日志;RabbitMQ 消息在 被 ack 前 一直占队列深度——监控见 rmq-monitor。