RabbitMQ实现延时任务

场景:下单之后的15分钟内如果没有下单,则自动取消订单。

第一个想到的方法是开启一个定时任务,每隔1分钟就去扫描订单状态,如果有符合条件的,则取消之。这种方式缺点很明显,很浪费资源,因为大部分查询的结果都是无效的。

下面进入正题:使用 RabbitMQ 的死信队列(Dead Letter Exchange)来实现延时任务。

什么是死信?

首先,什么是死信?一个消息在一个队列中处于下列三种状态:(1)消息被拒绝并且不再重新投递.(2)消息超期。(3)队列超载。就变成了死信。如果队列中出现了死信,就会被重新投递到另一个交换机,那么该队列就是死信队列。该交换机根据绑定规则转发到对应的队列上,监听该队列就可以重新消费。简单地说,就是(因为某些原因)没有被消费的消息换个地方重新被消费。

Read more   2020/03/06 posted in  编程