java – 作业排队和执行机制

在我的webservice中,所有方法调用都将作业提交到队列.基本上这些操作需要很长时间才能执行,因此所有这些操作都会将一个Job提交到队列并返回一个状态“Submitted”.然后,客户端使用其他服务方法继续轮询以检查作业的状态.

目前,我所做的是创建自己的Queue,Job类,它们是Serializable并将这些作业(即它们的序列化字节流格式)保存到数据库中.因此,UpdateLogistics操作只是将“UpdateLogisticsJob”排队到队列并返回.我编写了自己的JobExecutor,每隔N秒唤醒一次,扫描数据库表中的任何现有作业,并执行它们.请注意,作业必须保持不变,因为这些作业必须在应用程序服务器崩溃后继续存在.

这是很久以前完成的,我为我的队列,工作,执行官等使用了定制课程.但是现在,我想知道以前有人做过类似的事吗?特别是,

>是否有可用的框架? Spring / Apache等中的东西
>任何易于调整和调试的框架以及像Spring这样的库都能很好地运行.

编辑 – 石英

很抱歉,如果我没有解释更多,Quartz对于无状态工作(以及一些有状态的工作)也是有益的,但对我而言,关键是非常有状态的“工作实例”(不仅仅是工作或任务).因此,例如,executeWorkflow(“SUBMIT_LEAVE”)的操作可能实际上创建5个作业实例,每个作业实例具有至少5-10个参数,例如userId,accountId等,以保存到数据库中.

我正在寻找围绕该区域的一些支持,其中Job实例可以保存到DB并重新创建等?

最佳答案 看看
JBoss jBPM.这是一个工作流程定义包,可以让您混合自动和手动流程.任务被持久化到数据库后端,看起来它具有
some asynchronous执行属性.

点赞