延迟调度实现

很多时候我们想把事件在某些事件之后执行

如:提交失败的数据每隔一些时间段执行一次(1min,30min,2h)
如:订单下单没有付款,第1天,第3天发短信提示

一、这就需要延迟调度实现,本文介绍两种方式

1、使用消息中间件rabbitmq延迟死信队列实现

2、使用redis.zset存储关键key,使用执行时间作为score,每次取set首位元素比较当前时间(需要定时调度任务辅助)

rabbitmq方式类图展示

延迟调度实现
rabbitmq

 redis方式类图展示

延迟调度实现
redis

二、这种设计支持分布式,也支持高可用

不管对于mq还是redis,一般同一个服务不会是一台宿主机,多个宿主机节点。mq多个消费者监听同一个队列,由mq管理有效消费者。redis