跳到主要内容

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

相关文档