问题描述
小弟想实现这样一个定时任务功能:从队列中取出一个任务(通知商户发货任务)执行,如果执行失败则会在后续的{8S,30S,60S,300S,3600S,7200S}重复执行,其中任何一次执行成功则不需要再执行后续的。调研了下java几个定时器框架,quartz适合固定周期如每天定时执行的任务,不太适合这个场景,其它的如Timer和ScheduledExecutor可以实现,但需要自己去控制逻辑指定下次执行的时间,想问下第一个问题:有没有适合这种定时场景的框架可用呢?还有个问题是,如果采用quartz或ScheduledExecutor的话,任务有可能执行失败,如果某个商家通知接口暂时宕机,会造成大量的通知发货任务处于定时任务状态,是不是很消耗性能,第二个问题:有什么办法来控制这种异常情况?我的想法是如果真没有较好的控制方法,是不是可以牺牲点时间的准确性,用类似扫描器的功能,定时扫描队列,取出一批任务,如果到达执行时间了就执行,没有到达时间就放回队列,这样实现有什么需要考虑的吗?谢谢!
时间: 2024-11-05 14:49:28