rabbitmq延迟队列插件
因为最开始的rabbitmq是没有发送延迟消息这个功能,所以很多有这个需求的人用死信交换机来实现,mq官方看见就坐不住了,死信交换机不是这么用的啊,于是官方自己写了个插件,来实现延迟队列,就是rabbitmq-delayed-message-exchange 插件
配置流程(docker)
在保证自己rabbitmq镜像能正常启动之后
下载插件
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases
放到任意位置即可
- 进入放rabbitmq_delayed_message_exchange-3.9.0.ez插件的目录
cd /home/docker
- 将插件拷贝到容器内plugins目录下(rabbitmq是RabbitMQ容器的容器名称,也可以使用容器ID)
docker cp rabbitmq_delayed_message_exchange-3.9.0.ez rabbitmq:/plugins
- 进入 RabbitMQ 容器
docker exec -it cd-rabbitmq /bin/bash
- 查看 rabbitmq_delayed_message_exchange-3.9.0.ez 插件是否存在
cd plugins
ls |grep delay
- 在 plugins 内启用 rabbitmq_delayed_message_exchange-3.9.0.ez 插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
- 退出RabbitMQ容器
exit
- 重启 RabbitMQ 容器
-
docker restart
踩坑
版本问题
下载完插件时没留意版本,随便下了一个
到启动插件的时候报错
Error:
Failed to enable some plugins:
rabbitmq_delayed_message_exchange:
Plugin doesn't support current server version. Actual broker version: "3.9.11", supported by the plugin: ["3.7.0-3.7.x",
"3.8.0-3.8.x"]
一定版本要对应,3.9.x的版本要用3.9的插件
rabbitmq_management没有开启
这时候容器正常启动,插件开启正常,日志没有报错,端口暴露没问题,但是就是无法连接mq管理页面,找了很多资料,最后翻到了是因为没开启对应的插件,management对应的就是管理页面
需要执行一下以下两行命令
docker exec -it rabbitmq bash
rabbitmq-plugins enable rabbitmq_management
最后成功启动
不禁感慨,bug会以你各种意想不到形式出现