作业排队和执行机制

问题描述:

在我的web服务中,所有的方法调用都将作业提交给一个队列。基本上这些操作需要很长时间才能执行,所以所有这些操作都将一个Job提交给一个队列并返回一个表示“已提交”的状态。然后,客户端使用其他服务方法继续轮询以检查作业的状态。作业排队和执行机制

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

这是很久以前完成的,我用我的Queues,Jobs,Executors等定制的类。但现在,我想知道有人做过类似的事情吗?特别是,

  • 是否有框架可用于此? Spring/Apache等东西
  • 任何易于适应/调试并与像Spring这样的库一起玩的框架都很棒。

编辑 - 石英

很抱歉,如果我没有解释更多,石英有利于无状态的工作(和也为一些有状态的作业),但对我来说,关键是非常有状态坚持“作业实例“(不只是工作或任务)。因此,例如executeWorkflow("SUBMIT_LEAVE")的操作实际上可能会创建5个作业实例,每个实例都具有至少5-10个参数,如userId,accountId等以保存到数据库中。

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

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

+0

我很久以前看过jBPM,但不知道异步连续存在。谢谢 – 2010-05-19 14:33:30

我很长时间没有使用Quartz,但我怀疑它可以做你想做的一切。

弹簧批量加石英

取决于你的工作性质,你也可能会考虑spring-integration协助队列处理。但spring-batch可能会处理您的大部分要求。