最近我在京东看上了一款《Apple/苹果2024款MacBookAir 15英寸 M3(8+10核)16G1T深空灰轻薄笔记本电脑Z1GD0001N【定制】》
然后下单还没付款,然后出现了付款倒计时的显示,其原理就用到了队列的延迟队列。
那么,RabbitMQ延迟队列是什么?
“RabbitMQ延迟队列允许生产者发送消息时指定一个延迟时间,消费者不会立即收到消息,而是在指定的延迟时间之后才收到消息。
基于死信的延迟队列.drawio
RabbitMQ延迟队列的应用场景有以下几个方面:
这里有两个思路:
这里我们采取方案2:给RabbitMQ安装插件
运行结果:
和容器内/plugins目录对应的宿主机目录是:/var/lib/docker/volumes/rabbitmq-plugin/_data
官方文档说明页地址:https://www.rabbitmq.com/community-plugins.html
下载插件安装文件:
确认点1:查看当前节点已启用插件的列表:
确认点2:如果创建新交换机时可以在type中看到x-delayed-message选项,那就说明插件安装好了
rabbitmq_delayed_message_exchange插件在工作时要求交换机是x-delayed-message类型才可以,创建方式如下:
关于x-delayed-type参数的理解:
“原本指定交换机类型的地方使用了x-delayed-message这个值,那么这个交换机除了支持延迟消息之外,到底是direct、fanout、topic这些类型中的哪一个呢? 这里就额外使用x-delayed-type来指定交换机本身的类型
①情况A:资源已创建
②情况B:资源未创建
注意:使用rabbitmq_delayed_message_exchange插件后,即使消息成功发送到队列上,也会导致returnedMessage()方法执行
基于RabbitMQ实现延迟队列主要用于处理需要延迟处理的消息,如订单超时、消息通知、任务调度等场景。
RabbitMQ提供了两种主要方式来实现延迟队列:
这里选择了第二种方案,即安装rabbitmq-delayed-message-exchange
插件,该插件允许生产者发送消息时指定延迟时间,消费者将在指定的延迟时间后收到消息。插件的极限延迟时间可达两天,适用于多种需要延迟处理的业务场景。
创作不易,感谢大家支持!
参考链接:https://www.bilibili.com/video/BV1sw4m1U7Qe/