1. RabbitMQ核心概念解析
RabbitMQ作为AMQP协议最流行的实现,在分布式系统解耦、异步通信、流量削峰等场景中扮演着重要角色。理解其核心概念是面试考察的基础要点。
1.1 消息队列模型要素
- Broker:消息队列服务实例,负责接收、存储和转发消息
- Virtual Host:虚拟隔离环境,包含独立的交换机、队列和权限体系
- Connection:应用与Broker之间的TCP长连接
- Channel:复用Connection的轻量级逻辑连接
- Exchange:消息路由中枢,根据类型和绑定规则分发消息
- Queue:存储消息的缓冲区,消费者从中获取消息
- Binding:交换机和队列之间的关联规则
注意:Channel不是线程安全的,每个线程应该创建独立的Channel。我在实际项目中曾因共享Channel导致消息确认混乱。
1.2 交换机类型对比
| 类型 | 路由规则 | 典型场景 | 特殊说明 |
|---|---|---|---|
| Direct | 精确匹配routing key | 点对点通信 | 默认交换机类型 |
| Fanout | 广播到所有绑定队列 | 事件通知 | 忽略routing key |
| Topic | 通配符匹配routing key | 消息分类处理 | 支持*和#通配符 |
| Headers | 匹配消息头属性 | 复杂路由逻辑 | 性能较差少用 |
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 消息可靠性保障机制
2.1 消息确认模式
-
生产者确认(Publisher Confirm):
- 同步确认:channel.waitForConfirms()
- 异步确认:addConfirmListener()
- 我在电商项目中实测异步确认模式吞吐量比同步高3倍
-
消费者确认(Consumer Ack):
- 自动确认(autoAck=true):消息发送即认为成功
- 手动确认(basicAck):需显式调用确认方法
- 拒绝消息(basicNack/basicReject):支持重入队列
java复制// 典型的手
