延迟任务处理总结
所属分类 architecture
浏览量 1074
数据库轮询
定时扫描,获取到需要处理的任务
优点 简单
缺点 数据库压力大 实时性不高
JDK延迟队列 DelayQueue
poll() 非阻塞获取,没有到期元素返回null
public E poll(long timeout, TimeUnit unit)
take() 阻塞获取
优点 简单高效
缺点 数据存储在内存中,需要自己实现持久化方案来实现高可用 ,可能OOM
ScheduledExecutorService
Quartz定时任务
时间轮 TimingWheel
存储定时任务的环形队列
数组实现,数组中的每个元素存放一个定时任务列表
时间轮 时间格 跨度 tickMs
时间轮个数固定 wheelSize
优点 效率高,可靠性高(Netty,Kafka使用)
缺点 数据存储在内存中,需要自己实现持久化方案来实现高可用
kafka 为了处理大量的延时任务 使用多层时间轮
延时消息队列
RocketMQ 不支持任意时间自定义的延迟消息,仅支持内置预设值的延迟时间间隔的延迟消息。
redis zset
score排序
zrangeWithScores + zrem
先查出来 处理完后 再删除 注意并发问题
Jesque (redis zset + script)
延时任务更新时间如何实现
上一篇
下一篇
mysql中的浮点数
MongoDB面试题
MongoDB优缺点
springboot最核心的三个注解
springboot面试题
springboot自动配置原理和实例