第一步:安裝 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
表的 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
預期輸出:
PlaintextCONTAINER 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 | grep delay |
強制重啟容器 | docker restart share_rabbitmq |
注意事項
- 版本嚴格匹配:插件版本必須與 RabbitMQ 版本完全一致(均為?
3.12.x
)。 - 瀏覽器緩存:若管理界面未顯示?
x-delayed-message
,請強制刷新(Ctrl+F5
)。 - 生產環境建議:啟用數據持久化(
-v
?掛載目錄),避免容器重啟后數據丟失。
通過以上步驟,RabbitMQ 延遲隊列插件應正常工作。如遇其他問題,可運行 docker logs share_rabbitmq
查看日志定位原因。