什么是 RabbitMQ
RabbitMQ 是一个开源的消息代理和队列服务器,用来通过普通协议在不同的应用之间共享数据,或者简单地将作业队列排队以便让分布式服务器处理。核心特性
- 可靠性:支持持久化、传输确认、发布确认
- 灵活的路由:通过 Exchange 进行消息路由
- 集群:多个 RabbitMQ 服务器组成集群
- 高可用:队列可以在集群中进行镜像
- 多协议:支持 AMQP、STOMP、MQTT 等协议
- 多语言客户端:Java、Python、Go 等
- 管理界面:提供 Web 管理界面
- 插件机制:支持多种插件扩展
核心概念
AMQP 协议
AMQP(Advanced Message Queuing Protocol)是一种消息队列协议,定义了消息的格式和工作方式。核心组件
| 组件 | 说明 |
|---|---|
| Broker | 消息队列服务器实体 |
| Virtual Host | 虚拟主机,用于逻辑隔离 |
| Connection | 生产者/消费者与 Broker 的 TCP 连接 |
| Channel | 轻量级连接,建立在 Connection 上 |
| Exchange | 交换机,接收消息并路由到队列 |
| Queue | 消息队列,存储消息 |
| Binding | 交换机与队列的绑定关系 |
| Routing Key | 路由键,用于消息路由 |
Exchange 类型
| 类型 | 说明 | 路由规则 |
|---|---|---|
| Direct | 直连交换机 | 完全匹配 Routing Key |
| Fanout | 扇形交换机 | 广播到所有绑定队列 |
| Topic | 主题交换机 | 模糊匹配 Routing Key |
| Headers | 头部交换机 | 根据消息头属性匹配 |
Docker 安装
拉取镜像
运行容器
端口说明
| 端口 | 说明 |
|---|---|
| 5672 | AMQP 协议端口 |
| 15672 | 管理界面端口 |
| 25672 | 集群通信端口 |
访问管理界面
浏览器访问:http://localhost:15672
默认账号密码:admin / admin123
Linux 安装
安装 Erlang
RabbitMQ 依赖 Erlang 运行时。安装 RabbitMQ
启动服务
启用管理插件
创建用户
管理命令
用户管理
虚拟主机管理
权限管理
队列管理
Java 客户端
添加依赖
生产者示例
消费者示例
小结
- RabbitMQ 是基于 AMQP 协议的消息队列
- 核心组件:Broker、Exchange、Queue、Binding
- 四种 Exchange 类型:Direct、Fanout、Topic、Headers
- 推荐使用 Docker 快速安装
- 提供 Web 管理界面,端口 15672