代码之家  ›  专栏  ›  技术社区  ›  Kannan Ekanath

作业排队和执行机制

  •  4
  • Kannan Ekanath  · 技术社区  · 14 年前

    在我的WebService中,所有方法调用都将作业提交到队列。基本上,这些操作需要很长时间才能执行,所以所有这些操作都会将作业提交到队列,并返回一个状态,即“已提交”。然后客户机使用另一种服务方法继续轮询,以检查作业的状态。

    目前,我要做的是创建自己的队列、可序列化的作业类,并将这些作业(即它们的序列化字节流格式)持久化到数据库中。因此,updateLogistics操作只是将“updateLogisticsJob”排队返回。我已经编写了自己的JobExecutor,它每N秒唤醒一次,扫描数据库表中的任何现有作业,然后执行它们。注意,这些作业必须持久化,因为这些作业必须在应用服务器崩溃后幸存。

    这是很久以前做的,我使用定制类来处理我的队列、作业、执行器等。但是现在,我想知道以前有人做过类似的事情吗?特别地,

    • 是否有可用的框架?在春天/阿帕奇等地
    • 任何易于适应/调试并与Spring等库一起运行良好的框架都是很好的。

    编辑石英

    抱歉,如果我没有详细解释,Quartz适合无状态作业(也适用于某些有状态作业),但对我来说,关键是非常有状态的持久“作业实例”(不仅仅是作业或任务)。例如,一个操作 executeWorkflow("SUBMIT_LEAVE") 实际上可以创建5个作业实例,每个实例至少有5-10个参数(如userid、accountid等)保存到数据库中。

    我在寻找关于这个领域的一些支持,在那里工作实例可以保存到数据库中并重新创建等等?

    5 回复  |  直到 6 年前
        1
  •  2
  •   gibbss    14 年前

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

        2
  •  0
  •   Jon Skeet    14 年前

    我还没用过 Quartz 很长一段时间了,但我怀疑它能胜任你想做的一切。

        3
  •  0
  •   Aravind Yarram    14 年前

    春批加石英

        4
  •  0
  •   Mike Cornell    14 年前

    根据你工作的性质,你也可以调查 spring-integration 协助处理队列。但是 spring-batch 可能会处理您的大部分需求。

        5
  •  0
  •   labai    6 年前

    请尝试 特德司机 ( https://github.com/labai/ted )

    它的目的类似于您所需要的——您创建了任务(或其中许多任务),该任务保存在数据库中,然后 特德司机 负责执行。出错时,您可以将重试推迟到稍后或完成,但状态为“错误”。

    与其他Java框架不同,这里的任务在数据库中结构简单明了,可以手动搜索或使用标准SQL进行更新。