rabbitmq四层核心架构为生产者→交换机→队列→消费者:生产者只发消息给交换机并指定routing key;交换机按类型和绑定规则路由消息,不存储;队列是唯一消息存储点,支持持久化等属性;消费者仅订阅队列,需手动ack。

Java 中理解 RabbitMQ 的四层核心架构,关键在于抓住“消息怎么来、往哪去、存哪、谁来拿”这条主线。这四层不是并列关系,而是严格按消息流转顺序形成的链路:生产者 → 交换机 → 队列 → 消费者。
生产者:只跟交换机打交道
在 Java 客户端(比如 Spring AMQP 或原生 RabbitMQ Java Client)中,生产者不直接操作队列,它只负责把消息发给某个已声明的交换机,并附带一个 routing key。比如支付服务完成扣款后,调用 template.convertAndSend("order.exchange", "order.create", orderDto) —— 这里没提队列名,也不需要知道队列在哪。
- 生产者必须先声明交换机(可选持久化),否则发消息会报错
- routing key 是字符串,由业务定义(如 "user.register"、"log.error"),后续路由全靠它
- 消息体本身不包含队列信息,解耦就从这里开始
交换机:不做存储,只做路由决策
交换机是消息进入 RabbitMQ 后的第一个处理节点,它像一个智能分拣中心:收到消息后,根据自身类型(Direct / Topic / Fanout / Headers)和绑定规则(Binding),决定把消息投给哪些队列。Java 代码里它通常通过 ExchangeBuilder 或 @Bean 声明,例如:
@Bean
public TopicExchange topicExchange() {
return ExchangeBuilder.topicExchange("logs.exchange").durable(true).build();
}
- Direct 类型:routing key 必须与 binding key 完全一致才匹配
- Topic 类型:支持通配符(
*匹配单个词,#匹配零或多个词),适合多级分类场景 - Fanout 类型:无视 routing key,广播到所有绑定队列,常用于日志分发
- 交换机本身不存消息,如果没队列绑定或没匹配上,消息默认被丢弃(除非配置死信)
队列:唯一的消息落盘点
队列是 RabbitMQ 中唯一真正存储消息的地方,也是消费者唯一能从中拉取数据的来源。Java 中声明队列时,重点关注三个属性:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- durable:设为 true 表示队列持久化,RabbitMQ 重启后仍存在(但不保证消息一定不丢,需配合消息持久化)
- exclusive:true 表示排他队列,仅当前连接可用,断连即删,适合临时任务
- autoDelete:无消费者且无人绑定时自动删除,适合一次性任务
一个队列可以被多个消费者监听,RabbitMQ 默认以轮询方式分发消息,实现天然负载均衡。注意:消息进队列后,就和交换机、生产者彻底无关了。
消费者:只认队列,不关心上游
消费者在 Java 中通常表现为一个监听方法,比如 Spring AMQP 的 @RabbitListener(queues = "sms.queue")。它只订阅具体队列名,完全不知道消息来自哪个交换机、用了什么 routing key、甚至不知道生产者是谁。
- 消费者启动时会向 Broker 注册对指定队列的监听,Broker 主动推送(push 模式)或消费者主动拉取(pull 模式)
- 消费成功后必须发送 ack(确认),否则消息会重回队列或进死信队列;Spring 默认开启 autoAck=false,推荐手动控制
- 多个消费者共用一个队列时,一条消息只会被其中一个消费,避免重复处理
这四层各司其职,彼此隔离:生产者不依赖队列结构,交换机不保存消息,队列不关心消息来源,消费者不感知路由逻辑。正是这种清晰分层,让系统扩展和维护变得简单——加个新通知渠道?只需声明新队列、绑定到现有交换机、写个新消费者,支付服务代码完全不动。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










