在项目中需要这样的一个“任务调度”功能,JAVA、Spring环境:
1、通过API下达“任务”,这个任务将异步执行,可以立即执行也可以设定延迟时间
2、任务在新的线程池中异步执行,可以限制最大并行任务数(线程数)
3、任务的下达执行要与数据库事务相协调,不能出现任务开始执行了,但下达任务的线程数据库事务还没有提交的情况
4、任务执行失败,应可以重新执行,并可以指定延迟时间
5、可以配置任务间的依赖关系,例如:
a执行成功后执行b,
b执行完毕后不管成不成功均执行c,
c执行成功后执行d,执行失败则执行e,
g、h、i都执行成功后执行j,
k、l、m有一个执行成功执行n………等等
6、可以设置具体任务的失败最大重试次数
7、系统应是可靠的,系统因为任何原因崩溃后,重新启动系统,原有任务应能继续流转
8、最好有限制某种任务最大并发数的功能,例如某个任务是向B系统发送数据,可以限定这种任务的并发数
9、最好有现成的手段查看当前任务的情况,例如已经下达了什么任务、那些正在执行、执行时间,必要时可以干预任务,例如强制终止、重新执行等
我们现在使用数据库、JMS/ActiveMQ、Java线程池等实现了一个用着,但不够完善。
我感觉这个需求应该可以叫“工作流”,但是我在网上查询工作流,发现大多都是站在例如创建公文、审批等等类似公文流转的场景的,或者是一上来就讲一堆理论,或是更多讨论如何便于最终用户来画图、控制流程,我没有这个需求,流程基本由开发人员指定,且多为程序模块间的关系。
我想知道:
这是否是工作流范畴,如果是,请介绍在Java下的开源引擎中的实现思路;如果不是,是否有其它有关“任务调度”的框架?