使用Docker部署RabbitMQ

第一步:安装 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. 下载插件文件
  • 官方地址rabbitmq_delayed_message_exchange-3.12.0.ez

  • 验证文件

    复制代码
    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 表的 PREROUTINGOUTPUT 链关联到 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
注意事项
  1. 版本严格匹配 :插件版本必须与 RabbitMQ 版本完全一致(均为 3.12.x)。
  2. 浏览器缓存 :若管理界面未显示 x-delayed-message,请强制刷新(Ctrl+F5)。
  3. 生产环境建议 :启用数据持久化(-v 挂载目录),避免容器重启后数据丢失。

通过以上步骤,RabbitMQ 延迟队列插件应正常工作。如遇其他问题,可运行 docker logs share_rabbitmq 查看日志定位原因。

相关推荐
藥瓿亭6 分钟前
K8S认证|CKS题库+答案| 6. 创建 Secret
运维·ubuntu·docker·云原生·容器·kubernetes·cks
2302_8097983211 分钟前
【JavaWeb】Docker项目部署
java·运维·后端·青少年编程·docker·容器
嵌入式大圣13 分钟前
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
运维·docker·容器
孔令飞28 分钟前
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
ai·云原生·容器·golang·kubernetes
极简网络科技2 小时前
Docker、Wsl 打包迁移环境
运维·docker·容器
杨浦老苏2 小时前
轻量级Docker管理工具Docker Switchboard
运维·docker·群晖
江湖有缘2 小时前
【Docker管理工具】部署Docker可视化管理面板Dpanel
运维·docker·容器
一加一等于二3 小时前
docker部署postgresql17,并且安装插件
docker·postgresql
猫咪老师19954 小时前
多系统一键打包docker compose下所有镜像并且使用
java·docker·容器
aitav04 小时前
⚡️ Linux Docker 基本命令参数详解
linux·运维·docker