方案:
rabbitMq实现延时队列(TTL(Time to live) + DXE(Dead Letter Exchanges))-Redis的ZSet实现Redis 过期回调(Redis的key过期回调事件,也能达到延迟队列的效果,简单来说我们开启监听key是否过期的事件,一旦key过期会触发一个callback事件)定时器轮询遍历数据库记录 JDK的DelayQueue(完全二叉堆 + 根据时间排序,到时间才能取出)JDK ScheduledExecutorService (定时任务)时间轮(netty ,kafka)quartz等定时任务RocketMQ实现:延时消息,将消息放入不同级别的缓冲队列,在对应时间后,定时线程将消息在写入对应topic的普通消息中.实现原理(4种实现方案)
1.代理实现
2.时间轮和delay-commit-log实现
3.时间轮和时间file实现
4.基于rocketmq 18个等级来改造
参考:
https://gitee.com/venus-suite/rocketmq-with-delivery-time/wikis
https://cloud.tencent.com/developer/article/1581368
https://blog.51cto.com/u_14988994/2549690
https://zhuanlan.zhihu.com/p/75710822
https://www.jianshu.com/p/a8c1458998aa
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)