第一步:安装 RabbitMQ
# 1. 拉取镜像
docker pull rabbitmq:3.12.0-management
# 2. 启动容器(开放端口 + 数据持久化)
docker run -d \
--name=share_rabbitmq \
-p 5672:5672 \ # AMQP 协议端口
-p 15672:15672 \ # 管理界面端口
-v /opt/rabbitmq/data:/var/lib/rabbitmq \ # 数据持久化目录
rabbitmq:3.12.0-management
第二步:安装延迟队列插件
1. 下载插件文件
-
验证文件 :
ls -l rabbitmq_delayed_message_exchange-3.12.0.ez # 预期输出:-rw-r--r-- 1 user user 48214 Mar 22 03:55 rabbitmq_delayed_message_exchange-3.12.0.ez
2. 复制插件到容器
# 将插件复制到容器内插件目录
docker cp rabbitmq_delayed_message_exchange-3.12.0.ez share_rabbitmq:/opt/rabbitmq/plugins
# 验证文件是否复制成功
docker exec share_rabbitmq ls /opt/rabbitmq/plugins | grep delay
# 预期输出:rabbitmq_delayed_message_exchange-3.12.0.ez
3. 启用插件
# 进入容器
docker exec -it share_rabbitmq /bin/bash
# 启用插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
# 退出容器
exit
# 重启容器使插件生效
docker restart share_rabbitmq
第三步:验证插件状态
# 1. 检查插件列表
docker exec share_rabbitmq rabbitmq-plugins list | grep delay
# 预期输出:[E*] rabbitmq_delayed_message_exchange
# 2. 管理界面验证
# 访问 http://服务器IP:15672,使用 guest/guest 登录
# 进入 Exchanges 页,创建交换机时选择类型 x-delayed-message
第四步:错误处理(来自历史问题)
问题1:容器未运行
# 检查容器状态
docker ps -a | grep share_rabbitmq
# 启动容器
docker start share_rabbitmq
问题2:插件未启用
# 强制重新启用插件
docker exec share_rabbitmq rabbitmq-plugins disable rabbitmq_delayed_message_exchange
docker exec share_rabbitmq rabbitmq-plugins enable rabbitmq_delayed_message_exchange
docker restart share_rabbitmq
问题3:权限不足
# 修改插件文件权限
docker exec share_rabbitmq chmod 644 /opt/rabbitmq/plugins/rabbitmq_delayed_message_exchange-3.12.0.ez
问题4: Docker iptables 规则缺失
步骤 1:重启 Docker 服务
sudo systemctl restart docker
作用:强制 Docker 重新初始化网络规则和链。
步骤 2:手动重建 DOCKER 链
# 清理旧规则
sudo iptables -t nat -F
# 创建 DOCKER 链
sudo iptables -t nat -N DOCKER
# 绑定链到流量入口和出口
sudo iptables -t nat -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
sudo iptables -t nat -A OUTPUT -m addrtype --dst-type LOCAL -j DOCKER
关键点 :确保 nat
表的 PREROUTING
和 OUTPUT
链关联到 DOCKER
链。
步骤 3:加载必需的内核模块
# 加载网络桥接和 NAT 模块
sudo modprobe br_netfilter
sudo modprobe nf_nat
验证模块加载:
lsmod | grep -E "br_netfilter|nf_nat"
步骤 4:启动容器
docker start share_rabbitmq
步骤 5:验证容器状态
docker ps | grep share_rabbitmq
预期输出:
Plaintext
CONTAINER ID IMAGE STATUS PORTS NAMES a1b2c3d4e5f6 rabbitmq:3.12-management Up 2 seconds 4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp share_rabbitmq
附:关键操作速查表
步骤 | 命令 |
---|---|
启动容器 | docker run -d --name=share_rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12.0-management |
复制插件 | docker cp 插件文件 share_rabbitmq:/opt/rabbitmq/plugins |
启用插件 | docker exec share_rabbitmq rabbitmq-plugins enable rabbitmq_delayed_message_exchange |
验证插件 | `docker exec share_rabbitmq rabbitmq-plugins list |
强制重启容器 | docker restart share_rabbitmq |
注意事项
- 版本严格匹配 :插件版本必须与 RabbitMQ 版本完全一致(均为
3.12.x
)。 - 浏览器缓存 :若管理界面未显示
x-delayed-message
,请强制刷新(Ctrl+F5
)。 - 生产环境建议 :启用数据持久化(
-v
挂载目录),避免容器重启后数据丢失。
通过以上步骤,RabbitMQ 延迟队列插件应正常工作。如遇其他问题,可运行 docker logs share_rabbitmq
查看日志定位原因。