使用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 查看日志定位原因。

相关推荐
心动啊12126 分钟前
docker常用命令总结
docker·容器·eureka
python算法(魔法师版)28 分钟前
Docker容器启动失败?无法启动?
linux·运维·nginx·docker·容器
玄武后端技术栈2 小时前
RabbitMQ消息的重复消费问题如何解决?
分布式·rabbitmq
不学无术の码农6 小时前
Ubuntu 22.04 (WSL2) 上使用 Docker 安装 Nacos 3.0.0
ubuntu·docker
AnnyYoung8 小时前
从Dockerfile 构建docker镜像——保姆级教程
docker·容器·eureka
慧一居士8 小时前
Docker Compose 的详细使用总结、常用命令及配置示例
容器·架构
何怀逸8 小时前
安装 Docker
运维·docker·容器
码码哈哈0.08 小时前
2025最新:3分钟使用Docker快速部署单节点Redis
redis·docker·eureka
云攀登者-望正茂8 小时前
通过Kubernetes 外部 DNS控制器来自动管理Azure DNS 和 AKS
容器·kubernetes·azure
裁二尺秋风8 小时前
k8s(11) — 探针和钩子
java·容器·kubernetes