RabbitMQ(包括Docker)安装延时插件,实现延时列队

2022-06-04 865点热度 0人点赞 0条评论

我们知道,RabbitMQ是没有延时列队的,要实现延时列队需要用迂回的方式:

  1. 使用2个列队
  2. 给第一个列队设置一个ttl(Time-To-Live消息存活时间),且让列队不消费,等待这个ttl的时间后,列队消息死亡,进入死信exchange到死信列队
  3. 设置死信列队可以再次路由到其他队列中,进行消息,从而实现延时的功能

流程图如下:

这个方式有个问题就是流程有点复杂,

会产生很多列队和交换机(尤其是当业务较多,有较多类型的消息要实现延迟的情况下,会成倍的增加这些列队)容易出错。

延时插件解决方式

RabbitMQ是支持插件的,好在有专门的延迟插件来做这件事情,Github官网:rabbitmq-delayed-message-exchange

插件文件下载:https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases下载到最新的插件文件,例如:rabbitmq_delayed_message_exchange-3.10.2.ez

  • 非Docker方式安装的RabbitMQ启用方式

把rabbitmq_delayed_message_exchange-3.10.2.ez文件复制到rabbitMQ安装目录的plugins目录,例如:/opt/rabbitmq/plugins/下

然后执行启用插件命令:

# first cp rabbitmq_delayed_message_exchange-3.10.2.ez to: /opt/rabbitmq/plugins/
/opt/rabbitmq/sbin/rabbitmq-plugins enable rabbitmq_delayed_message_exchange

# 启用好了以后,重启RabbitMQ即可
  • Docker方式安装的RabbitMQ启用方式

如果是docker方式安装的,也很简单,假设rabbitmq_delayed_message_exchange-3.10.2.ez是在主机上加载好了,放在/opt/rabbitmq_delayed_message_exchange-3.10.2.ez

首先先把/opt/rabbitmq_delayed_message_exchange-3.10.2.ez复制到容器里去:

# 把rabbitmq_delayed_message_exchange-3.10.2.ez复制到容器里去(容器名称rabbitmq可以根据docker ps看下,或者使用容器ID)
docker cp /opt/rabbitmq_delayed_message_exchange-3.10.2.ez rabbitmq:/opt/rabbitmq/plugins/

# 进入容器
docker exec -it rabbitmq bash

# 进入容器后,直接启用plugin
/opt/rabbitmq/sbin/rabbitmq-plugins enable rabbitmq_delayed_message_exchange

# 退出容器后,重启下rabbitmq
docker restart rabbitmq

然后网页上登录后,看看新建交换机里面的类型是否有x-deplayed-message这种交换机类型了。

上图:

 

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论