Docker 部署 RabbitMQ
RabbitMQ 是开源的消息代理软件,实现了 AMQP 协议。
快速开始
基础部署
docker run -d \
--name rabbitmq \
-p 5672:5672 \
-p 15672:15672 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=123456 \
rabbitmq:management
访问管理界面
- 地址:
http://localhost:15672 - 用户名:
admin - 密码:
123456
使用配置文件
1. 创建配置文件
mkdir -p /etc/rabbitmq
cat > /etc/rabbitmq/rabbitmq.conf << EOF
# 绑定地址
listeners.tcp.default = 5672
# 管理界面
management.tcp.port = 15672
# 内存限制
vm_memory_high_watermark.relative = 0.6
# 磁盘空间限制
disk_free_limit.absolute = 2GB
# 日志
log.dir = /var/log/rabbitmq
log.file = rabbit.log
EOF
2. 启动容器
docker run -d \
--name rabbitmq \
-p 5672:5672 \
-p 15672:15672 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=123456 \
-v /etc/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v rabbitmq-data:/var/lib/rabbitmq \
-v rabbitmq-logs:/var/log/rabbitmq \
rabbitmq:management
Docker Compose 部署
version: '3.8'
services:
rabbitmq:
image: rabbitmq:management
container_name: rabbitmq
ports:
- "5672:5672"
- "15672:15672"
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: 123456
volumes:
- rabbitmq-data:/var/lib/rabbitmq
- rabbitmq-logs:/var/log/rabbitmq
healthcheck:
test: ["CMD", "rabbitmqctl", "status"]
interval: 30s
timeout: 10s
retries: 3
volumes:
rabbitmq-data:
rabbitmq-logs:
高级配置
集群模式
version: '3.8'
services:
rabbitmq1:
image: rabbitmq:management
container_name: rabbitmq1
hostname: rabbitmq1
ports:
- "5672:5672"
- "15672:15672"
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: 123456
RABBITMQ_ERLANG_COOKIE: 'rabbitmq_cookie'
volumes:
- rabbitmq1-data:/var/lib/rabbitmq
rabbitmq2:
image: rabbitmq:management
container_name: rabbitmq2
hostname: rabbitmq2
ports:
- "5673:5672"
- "15673:15672"
environment:
RABBITMQ_ERLANG_COOKIE: 'rabbitmq_cookie'
RABBITMQ_ERLANG_COOKIE: 'rabbitmq_cookie'
volumes:
- rabbitmq2-data:/var/lib/rabbitmq
depends_on:
- rabbitmq1
rabbitmq3:
image: rabbitmq:management
container_name: rabbitmq3
hostname: rabbitmq3
ports:
- "5674:5672"
- "15674:15672"
environment:
RABBITMQ_ERLANG_COOKIE: 'rabbitmq_cookie'
RABBITMQ_ERLANG_COOKIE: 'rabbitmq_cookie'
volumes:
- rabbitmq3-data:/var/lib/rabbitmq
depends_on:
- rabbitmq1
volumes:
rabbitmq1-data:
rabbitmq2-data:
rabbitmq3-data:
启用插件
# 启用管理插件
docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_management
# 启用延迟消息插件
docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_delayed_message_exchange
常用命令
# 查看状态
docker exec -it rabbitmq rabbitmqctl status
# 查看队列
docker exec -it rabbitmq rabbitmqctl list_queues
# 查看连接
docker exec -it rabbitmq rabbitmqctl list_connections
# 查看交换机
docker exec -it rabbitmq rabbitmqctl list_exchanges
# 清空队列
docker exec -it rabbitmq rabbitmqctl purge_queue queue_name
运维建议
| 建议 | 说明 |
|---|---|
| 内存限制 | 设置合理的内存限制 |
| 持久化 | 使用持久化队列和消息 |
| 监控 | 监控队列长度、连接数 |
| 备份 | 定期备份配置和数据 |
故障排查
| 问题 | 解决方案 |
|---|---|
| 连接失败 | 检查端口和用户配置 |
| 内存不足 | 增加内存限制或清理队列 |
| 消息丢失 | 使用持久化队列 |
| 性能问题 | 检查网络和磁盘 IO |