任务调度
大约 1 分钟
市面上目前有不少任务调度的框架,如:XXL-JOB、SchedulerX、Quartz。虽然百花齐放,但是都有各自的问题。XXL-JOB 不能和注册中心整合,要独立配置。SchedulerX 是阿里的付费产品,不开源。Quartz 用起来比较麻烦,不如自己开发开发了。由于我们对任务调用的使用强度不高,所以建议使用 spring 定时器来实现此功能,本文主要介绍一些思路供大家参考。
实现思路
- 为了降低耦合度,每个模块的任务调度独立开发。如:basic-paper-ticket-scheduler(工单模块)
- 为了防止任务丢失,数据库中创建各自模块的任务表来实例化任务。
- 为了支持多实例,程序配置任务调度实例名(实例名配置在 nacos 的 metadata 中),任务调度表会使用此实例名才分配任务,每个实例负责自己的任务。(待商榷,不太好用,尽量减少配置)
- 为了方便客户端调用,使用 REST API 的方式创建删除任务,任务可以使用
ThreadPoolTaskScheduler
来创建。 - 为了与业务模块进去区分,任务调度模块端口使用 81 开头,如:工单模块端口为 8005,那么工单的任务调度模块端口为 8105。