RabbitMQ默认不带延迟队列插件,可以到官网去下载指定版本的插件,并手动安装到RabbitMQ环境中,在这里我使用的RabbitMQ版本是:rabbitmq:3.8-management
延迟队列插件版本是:rabbitmq_delayed_message_exchange-3.8.9-0199d11c.ez
docker-compose脚本
version: "3"
services:
rabbitmq:
container_name: myrabbit
ports:
- 15672:15672
- 5672:5672
restart: always
volumes:
- /etc/localtime:/etc/localtime
- /home/mycontainers/myrabbit/rabbitmq:/var/lib/rabbitmq
network_mode: mynetwork
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=123456
image: myrabbitmq:3.8-management
启动容器
docker-compose -f docker-compose.yml up -d
然后我们将下载到的插件拷贝到rabbitmq容器的/plugins目录下
docker cp rabbitmq_delayed_message_exchange-3.8.9-0199d11c.ez myrabbit:/plugins
进入容器内,启动我们刚刚添加的插件
docker exec -it myrabbit bash
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
查看插件是否有安装成功
#在容器内执行:
rabbitmq-plugins list
#在宿主机中执行这个:
docker exec myrabbit rabbitmq-plugins list
#能看到我们新添加的插件就说明成功了
优化搭建步骤
上面的步骤有些麻烦,当我们需要频繁的搭建RabbitMQ环境的时候就不方便了,所以我们可以优化一下,做一些准备工作,让后续的容器搭建变得便利。
目的
一键创建并启动RabbitMQ容器,并且附带延迟队列插件
思路
在rabbitmq原有镜像的基础上,制作新镜像,在容器启动之后自行启用插件
步骤
#创建镜像文件夹:
mkdir image
cd image
#编写Dockerfile文件:
FROM rabbitmq:3.8-management
COPY rabbitmq_delayed_message_exchange-3.8.9-0199d11c.ez /plugins
RUN rabbitmq-plugins enable --offline rabbitmq_delayed_message_exchange
上面的内容是依赖于rabbitmq:3.8-management镜像,并且将当前目录下的插件文件拷贝到/plugins中,然后执行插件启用命令
此时image文件夹的目录结构是这样的:
- image
Dockerfile
rabbitmq_delayed_message_exchange-3.8.9-0199d11c.ez
记得把插件准备好
制作镜像:下面命令的. 不能省略
docker build -t myrabbitmq:3.8-management .
查看镜像:
docker images
修改原来的docker-compose脚本,修改镜像为:
version: "3"
services:
rabbitmq:
container_name: myrabbit
ports:
- 15672:15672
- 5672:5672
restart: always
volumes:
- /etc/localtime:/etc/localtime
- /home/mycontainers/myrabbit/rabbitmq:/var/lib/rabbitmq
network_mode: mynetwork
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=123456
image: myrabbitmq:3.8-management # 只改了这里,其他都是一样的
重新启动即可,由此,我们后面每次搭建新的RabbitMQ环境都不用再手动安装插件了。