docker 安装 rabbitMQ 延时插件

业务场景 首先,我们先回想一些实际的业务场景: 1.电商平台上下单后,30min内如果不支付,订单将自动取消; 2.12306购买火车票,下单后15min内不支付,车票自动取消; 这些是怎么实现的呢?很显然最简单的就是通过定时器实现,创建一个定时器,每分钟都去扫描下订单表,判断处于未支付状态的订单创建时间与当前时间的差值是否≥30分钟了,如果是则执行取消订单业务逻辑。 定时器的实现方式,简单粗暴,在数据量很小的情况下还勉强可以使用,但是当订单表数据量越来越大时,定时器每次执行都要去扫描下百万级,千万级体量的数据表,这是绝对不允许的做法。 延迟队列 某位不知名的人曾说道: “既然门被堵死了,那我们就看看能不能翻窗户过去”。 我们再仔细琢磨下上面的业务场景,它们业务需求上有个核心的特点——延迟 即延迟一段时间后做某件事情。这时候RabbitMQ就登场了。 RabbitMQ是款主流的消息中间件,借助它我们实现延迟队列,轻松实现上面的需求。关于RabbitMQ的特性和基本用法本文不做赘述。感兴趣的可以自行搜索下。 1.什么是延迟队列? 无论RabbitMQ、kafka还是其它消息中间件,当消息被正确的投递的队列后,监听这个队列的消费者会立即取出消息进行消费。如果消息被投递到队列后,可以延迟一段时间后才被消费,那么这就是延迟队列。并且延迟时间是可以自定义法的。 2.如何使用延迟队列? 上面说过,在延迟队列中,消息被投递到队列后,可以延迟一段时间后才被消费。那么我们就可以在创建订单时向MQ中投递一个消息,消息内容为订单ID,并指定消息延迟时间为30分钟,这样就可以达到与定时器一样的效果,并且更加优雅、高效。 3.RabbitMQ延迟队列插件 在RabbitMQ中,我们可以通过消息的过期时间TTL和死信队列DLX来实现延迟队列,虽说这种实现的方式可以用,但是并不推荐,因为比较复杂,还有许多问题。 RabbitMQ官方提供了延迟队列插件rabbitmq-delayed-message-exchange,使我们的使用延迟队列更加简单。接下来我们就来动手安装下:

1.下载插件

我们需要去RabbitMQ官网上下载延迟队列插件,下载前请确认自己的RabbitMQ版本,下载对应版本的插件。

下载地址:https://www.rabbitmq.com/community-plugins.html

点击 rabbitmq/rabbitmq-rtopic-exchange 后默认会跳转到Github,然后下载我们选择ez格式文件,并上传到服务器上

docker ps
docker exec -it 38c18c6d9866 /bin/bash
docker cp /devdata/MQplugins/rabbitmq_delayed_message_exchange-3.9.0.ez 38c18c6d9866:/plugins

root@38c18c6d9866:/plugins# rabbitmq-plugins enable rabbitmq_delayed_message_exchange
Enabling plugins on node rabbit@38c18c6d9866:
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@38c18c6d9866...
The following plugins have been enabled:
  rabbitmq_delayed_message_exchange

started 1 plugins.
root@38c18c6d9866:/plugins# 
桂ICP备2023011077号-1