以 官方的 rabbitmq:3.9.20-management 为例,默认开启的插件有4个,如下所示
2022-07-09 21:31:55.624125+08:00 [info] <0.814.0> started TCP listener on [::]:5672
completed with 4 plugins.
2022-07-09 21:31:55.933210+08:00 [info] <0.669.0> Server startup complete; 4 plugins started.
2022-07-09 21:31:55.933210+08:00 [info] <0.669.0> * rabbitmq_prometheus
2022-07-09 21:31:55.933210+08:00 [info] <0.669.0> * rabbitmq_management
2022-07-09 21:31:55.933210+08:00 [info] <0.669.0> * rabbitmq_web_dispatch
2022-07-09 21:31:55.933210+08:00 [info] <0.669.0> * rabbitmq_management_agent
从上面的日志可以看出,默认开启的4个 rabbitmq_prometheus rabbitmq_management rabbitmq_web_dispatch rabbitmq_management_agent。
进入今天的正题,开启 延迟队列 rabbitmq_delayed_message_exchange 。
方式一
容器启动后,执行exec -it,然后手工安装。好像这个也行,但是没有达到我的要求。我的要求比较高。试想一下,如果使用docker swarm(会有多主机,多个运行容器的问题,也就是说,以后会有多少个容器是未知的,所以也就不可能docker exec -it 进行安装了)。所以此方案不考滤。
方式二
那就从映像上入手呗。基于官网的说明,那就自己构造镜像(是在官网的基出上哦,不是从零开始)。docker rabbit上有这么一句
FROM rabbitmq:3.8-management
RUN rabbitmq-plugins enable --offline rabbitmq_mqtt rabbitmq_federation_management rabbitmq_stomp
好的,那就试试它吧。
整理一下过程
1、下载延迟队列插件所需的文件,并且放在和Dockerfile文件同一目录下
2、编写Dockerfile脚本
FROM rabbitmq:3.9.20-management
COPY rabbitmq_delayed_message_exchange-3.9.0.ez /plugins
RUN rabbitmq-plugins enable --offline rabbitmq_delayed_message_exchange
3、构建Image
[root@centos7-01 rabbitmq]# docker build -t my-rabbitmq:3.9.20-management .
Sending build context to Docker daemon 40.96kB
Step 1/3 : FROM rabbitmq:3.9.20-management
---> fb704bff19d0
Step 2/3 : COPY rabbitmq_delayed_message_exchange-3.9.0.ez /plugins
---> f1820f32b441
Step 3/3 : RUN rabbitmq-plugins enable --offline rabbitmq_delayed_message_exchange
---> Running in 2889e79eda7b
Enabling plugins on node rabbit@2889e79eda7b:
rabbitmq_delayed_message_exchange
The following plugins have been configured:
rabbitmq_delayed_message_exchange
rabbitmq_management
rabbitmq_management_agent
rabbitmq_prometheus
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@2889e79eda7b...
The following plugins have been enabled:
rabbitmq_delayed_message_exchange
set 5 plugins.
Offline change; changes will take effect at broker restart.
Removing intermediate container 2889e79eda7b
---> ddcdf3a8eb80
Successfully built ddcdf3a8eb80
Successfully tagged my-rabbitmq:3.9.20-management
[root@centos7-01 rabbitmq]#
4、测试一下生成的Image
[root@centos7-01 rabbitmq]# docker run --name my-rab-test my-rabbitmq:3.9.20-management
2022-07-09 14:08:27.502513+00:00 [info] <0.228.0> Feature flags: list of feature flags found:
2022-07-09 14:08:27.551333+00:00 [info] <0.228.0> Feature flags: [ ] implicit_default_bindings
2022-07-09 14:08:27.551460+00:00 [info] <0.228.0> Feature flags: [ ] maintenance_mode_status
2022-07-09 14:08:27.551568+00:00 [info] <0.228.0> Feature flags: [ ] quorum_queue
2022-07-09 14:08:27.551636+00:00 [info] <0.228.0> Feature flags: [ ] stream_queue
2022-07-09 14:08:27.551793+00:00 [info] <0.228.0> Feature flags: [ ] user_limits
...... 省略了一些
2022-07-09 14:08:49.027571+00:00 [info] <0.840.0> started TCP listener on [::]:5672
completed with 5 plugins.
2022-07-09 14:08:49.540134+00:00 [info] <0.685.0> Server startup complete; 5 plugins started.
2022-07-09 14:08:49.540134+00:00 [info] <0.685.0> * rabbitmq_prometheus
2022-07-09 14:08:49.540134+00:00 [info] <0.685.0> * rabbitmq_delayed_message_exchange
2022-07-09 14:08:49.540134+00:00 [info] <0.685.0> * rabbitmq_management
2022-07-09 14:08:49.540134+00:00 [info] <0.685.0> * rabbitmq_web_dispatch
2022-07-09 14:08:49.540134+00:00 [info] <0.685.0> * rabbitmq_management_agent
可以看到,官方的是4个插件,现在变成了5个了,并且看到了 rabbitmq_delayed_message_exchange
5、提交Image到私服
6、后面使用的话,由 rabbitmq:3.9.20-management 改为 my-rabbitmq:3.9.20-management 即可。
参考:docker compose 安装 Rabbitmq 并安装延迟队列插件_垂柳踏浪的博客-优快云博客_docker-compose rabbitmq