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

相关推荐
codeRichLife4 小时前
docker拷贝,导入/导出等常用命令
docker
努力搬砖的咸鱼5 小时前
部署你的第一个应用到 K8s
微服务·云原生·容器·kubernetes
lpruoyu5 小时前
【Docker进阶-01】Docker隔离原理与可视化界面-Portainer
docker
舰长1155 小时前
使用 kubeadm搭建生产环境的单 master 节点 K8S 集群(一)
云原生·容器·kubernetes
三水不滴6 小时前
对比一下RabbitMQ和RocketMQ
经验分享·笔记·分布式·rabbitmq·rocketmq
Swift社区6 小时前
Docker 构建 Python FastAPI 镜像最佳实践
python·docker·fastapi
API开发6 小时前
CentOS 单独安装Docker Compose v2
linux·docker·centos·docker compose
hwj运维之路6 小时前
Docker面试题汇总系列
运维·docker·云原生·容器
chao_7897 小时前
双设备全栈开发最佳实践[mac系统]
git·python·macos·docker·vue·全栈
搬砖者(视觉算法工程师)7 小时前
简单介绍Docker:Docker 容器中预装 Ubuntu 20.04 与 ROS Noetic
docker