最常见的场景莫过于订单的超时关单。
方案一:每创建一个订单,在 Java 的 ScheduledThreadPoolExecutor 中添加一个一次性的定时任务(每个定时任务只负责检测一个订单)
优点
- 精确。
缺点
- 订单量大时,会占用比较多的内存资源。
- 复杂性:应用实例变得有状态了,需要考虑应用重启后重建未执行的定时任务。如果有多个应用实例,重建逻辑将会更复杂。
方案二:定期执行的定时任务扫表
优点
- 简单,易于控制和实现。
缺点
- 有一定的误差。
方案三:消息队列
兼顾准确性和应用实例的无状态性,但需要引入消息队列,增加系统的复杂性。
网友评论