延时队列 之 MQ实现方案 及 RabbitMQ TTL+DLX 或插件实现
MQ 消息中间件基本都支持延时消息或消息过期处理相关功能,可以使用此功能来实现消息队列。
使用 MQ 实现延时队列的基本逻辑,是将消息发送到普通队列,让消息自动过期被转发路由到死信队列,消费者订阅死信队列。
MQ 消息中间件基本都支持延时消息或消息过期处理相关功能,可以使用此功能来实现消息队列。
使用 MQ 实现延时队列的基本逻辑,是将消息发送到普通队列,让消息自动过期被转发路由到死信队列,消费者订阅死信队列。
常用的定时任务的实现方式:
基于 Redisson 的最佳实践应用 Redisson 实现了延时队列(Delayed Queue )功能,可以直接拿来使用。
Redis 从 2.8.0 版本开始提供了 键空间通知 特性。键空间通知允许客户端订阅发布/订阅通道,以便接收以某种方式影响Redis 数据集的事件。
可以基于 Redis 的键空间通知中的 键过期事件通知来实现延时队列的功能。
Redis 的 Sorted Set 数据类型是一个有序集合,不可重复集合。有序集合的每个元素都有一个用于排序的权重(score)属性。
此类型非常适合用于制作排行榜,同样可以借助权重(score)属性作为元素的延时时间来实现延时队列的功能。
最近项目用到了延时队列,是基于 Redis 的 Sorted Set
数据类型和 ZRANGEBYSCORE
命令实现的。
延时队列还有其他实现方式,可以根据项目环境和业务需要选择适当的方案,这里做个汇总和记录。