最近在生产环境刚好遇到了延时任务的场景,调研了一下目前主流的方案,分析了一下优劣并且敲定了最终的方案。这篇文章记录了调研的过程,以及初步方案的实现。
候选方案对比
下面是想到的几种实现延时任务的方案,总结了一下相应的优势和劣势。
方案
优势
劣势
选用场景
JDK 内置的延迟队列 DelayQueue
实现简单
数据内存态,不可靠
一致性相对低的场景
调度框架和 MySQL 进行短间隔轮询
实现简单,可靠性高
存在明显的性能瓶颈
数据量较少实时性相对低的场景
RabbitMQ 的 DLX 和 TTL,一般称为 死信队列 方案
异步交互可以削峰
延时的时间长度不可控,如果数