工作队列和执行机制

4
在我的WebService中,所有的方法调用都会提交作业到队列中。基本上这些操作需要很长时间才能执行,因此所有这些操作都会将作业提交到队列中,并返回一个状态,表示“已提交”。然后客户端使用另一个服务方法进行轮询,以检查作业的状态。
目前,我所做的是创建自己的队列、作业类,这些类是可序列化的,并将这些作业(即它们的序列化字节流格式)持久化到数据库中。因此,更新物流操作只是将“UpdateLogisticsJob”排入队列并返回。我编写了自己的JobExecutor,它每隔N秒钟唤醒一次,扫描数据库表以查找任何现有的作业,并执行它们。注意,这些作业必须被持久化,因为这些作业必须在应用服务器崩溃时保留下来。
这是很久以前做的事情了,我使用了自己的队列、作业、执行器等定制类。但现在,我想知道是否有人做过类似的事情?特别是,
  • 是否有可用的框架?Spring/Apache等的一些东西
  • 任何易于适应/调试并与Spring等库良好配合的框架都将非常棒。
编辑-Quartz 抱歉如果我没有解释更多,Quartz适用于无状态作业(也适用于一些有状态作业),但对我来说,关键是非常有状态的持久化“作业实例”(不仅仅是作业或任务)。因此,例如executeWorkflow("SUBMIT_LEAVE")操作实际上可能会创建5个作业实例,每个实例至少有5-10个参数,如userId、accountId等要保存到数据库中。
我正在寻找在该领域提供支持的一些框架,可以将作业实例保存到数据库中并重新创建等。
5个回答

2

请看一下JBoss jBPM。它是一个工作流定义包,可以让您混合使用自动化和手动处理。任务被持久化到DB后端,并且看起来它有一些异步执行属性。


我很久以前看过jBPM,但不知道存在异步延续。谢谢。 - Kannan Ekanath

0

我已经很久没有使用Quartz了,但我怀疑它能够完成你想做的一切。


0

Spring Batch 加 Quartz


0
根据您的工作性质,您可能还需要考虑使用spring-integration来协助队列处理。但是spring-batch可能已经满足了您大部分的需求。

0
请尝试使用ted-driver(https://github.com/labai/ted)
它的目的与您所需要的类似——您可以创建任务(一个或多个),将其保存在数据库中,然后ted-driver负责执行它。发生错误时,您可以推迟重试或以错误状态完成。
与其他Java框架不同,在这里,任务以简单明了的结构存储在数据库中,您可以使用标准SQL手动搜索或更新。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接