先记录一点工作中的使用,后面自己有时间补上
基础至少
核心概念
| 概念 | 说明 |
|---|---|
| Producer(生产者) | 发送消息的客户端应用程序 |
| Consumer(消费者) | 接收消息的客户端应用程序 |
| Broker | RabbitMQ 服务节点/服务实例 |
| Connection(连接) | 客户端与 Broker 之间的 TCP 连接 |
| Channel(信道) | TCP 连接上的虚拟连接,用于复用 TCP 连接、减少开销 |
| Queue(队列) | 存储消息的数据结构,消息的容器 |
| Exchange(交换机) | 消息分发中心,接收生产者消息并按规则路由到队列 |
| Binding(绑定) | 交换机和队列之间的虚拟连接,绑定中可包含 Routing Key |
| Routing Key(路由键) | 消息头的属性,决定交换机的转发路径 |
| Virtual Host(虚拟主机) | 逻辑隔离机制,类似 MySQL 的 database |
工作流程:生产者 → 发送消息到 Exchange → Exchange 根据 Routing Key 和 Binding 规则 → 路由到对应 Queue → 消费者从 Queue 消费消息
⚠️ 重要:多个消费者订阅同一个队列时,每条消息只能被一个消费者消费,而非广播给所有消费者。
交换机类型(Exchange Types)
| 类型 | 路由规则 | 适用场景 |
|---|---|---|
| Direct | Routing Key 与 Binding Key 精确匹配 | 定向消息(如按日志级别分发) |
| Fanout | 广播到所有绑定的队列,忽略 Routing Key | 广播通知、多终端同步 |
| Topic | 通配符匹配:* 匹配一个单词,# 匹配零或多个单词 |
灵活路由(如按地区、角色过滤) |
| Headers | 根据消息头属性匹配(不常用) | 复杂路由规则 |
六种工作模式
| 模式 | 特点 | 适用场景 |
|---|---|---|
| Simple(简单模式) | 1 个生产者 → 1 个队列 → 1 个消费者 | 一对一简单通信 |
| Work Queues(工作队列) | 1 个队列 → 多个消费者竞争消费(默认轮询) | 任务分发、负载均衡 |
| Publish/Subscribe(发布订阅) | Fanout 交换机广播到所有队列,每个队列对应一个消费者 | 日志广播、多系统同步 |
| Routing(路由模式) | Direct 交换机根据 Routing Key 精确路由 | 按类型定向分发 |
| Topics(主题模式) | Topic 交换机通过通配符模糊匹配 Routing Key | 灵活过滤(如按区域/角色) |
| RPC(远程调用) | 客户端发送请求并等待响应 | 同步远程调用 |
常用命令速查
服务管理:
1 | rabbitmq-server # 前台启动(调试用) |
插件管理:
1 | rabbitmq-plugins list # 列出所有插件 |
核心管理命令(rabbitmqctl):
1 | rabbitmqctl status # 查看节点状态 |
Web 管理界面:启用 rabbitmq_management 插件后,访问 http://HOST:15672,默认账号 guest/guest(仅限 localhost 访问)。
关键注意事项
- 消息无法路由:若 Exchange 无法路由消息,
mandatory=true时返回生产者,false时直接丢弃 - 消息确认:生产环境务必开启消费者手动 ACK,避免消息丢失
- 队列监控:关注
Ready(待消费)和Unacked(已取未确认)数量,持续增长需及时处理 - 安全:生产环境创建独立用户并设置权限,避免使用默认 guest 账号远程访问
集成springboot
依赖:
1 | <dependency> |
| 组成部分 | 含义 |
|---|---|
rabbitTemplate |
Spring 提供的 AMQP 消息发送模板,封装了连接创建、信道复用、异常处理等底层细节。 |
convertAndSend |
意为 “转换并发送”。它会自动将 Java 对像序列化为字节流,再发布到 Broker。 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 coder-xuyong!
评论



