【问题标题】:Searching for Generic Asynchronous Java Job Execution Framework / Library搜索通用异步 Java 作业执行框架/库
【发布时间】:2010-10-11 09:22:33
【问题描述】:

我正在寻找可以处理Callables 或Runnables 的通用异步Java 作业执行框架。它类似于java.util.concurrent.ExecutorService,(并且可能包含ExecutorService),但它还具有以下功能:

  1. 能够将作业持久化到数据库中,以防应用程序在为作业提供服务时出现故障,并且能够重新启动未完成的作业。 (我知道我的工作可能必须实现Serializable 这没关系。)

  2. 使用 UUID 使客户端能够获取作业令牌并查询作业状态。 (在后台,这些信息也会被持久化到数据库中。)

我自己已经开始通过围绕ExecutorService 构建来解决这个问题,但我更喜欢开箱即用的开源解决方案(如果存在的话)。

可以在 Spring 框架中工作的东西是理想的。

【问题讨论】:

    标签: java spring executorservice


    【解决方案1】:

    你可能想看看Quartz

    Quartz 是一个功能齐全的开源作业调度系统,可以与几乎任何 J2EE 或 J2SE 应用程序集成或一起使用——从最小的独立应用程序到最大的电子商务系统。 Quartz 可用于创建简单或复杂的调度,以执行数十、数百甚至数万个作业;任务被定义为标准 Java 组件或 EJB 的作业。 Quartz Scheduler 包括许多企业级功能,例如 JTA 事务和集群。

    【讨论】:

      【解决方案2】:

      您可以使用Quartz,并创建一个具体的Job 适配器,该适配器委托给RunnableCallable。 Quartz 的Job 接口增加了在任务调用之间维护某些状态的能力。如果需要,Quartz 可以将作业及其状态持久地存储在关系数据库中,并在可扩展的主机集群上执行它们。

      【讨论】:

        【解决方案3】:

        看看http://www.opensymphony.com/quartz/wikidocs/Features.html,看看它是否已经为你准备好了。

        从那个页面:

        使用附带的 JDBCJobStore,所有配置为“非易失性”的作业和触发器都通过 JDBC 存储在关系数据库中

        【讨论】:

          【解决方案4】:

          另一个方向可能是使用Terracotta,它能够在您的 JVM 中集群堆并将其持久化以确保可用性。如果从调度的角度来看,Terracotta 支持与 Quartz 的集成,这很有用。此外,还有一个 master-worker 和消息传递 integration module 也可能有用。 Terracotta 是开源的。

          【讨论】:

            【解决方案5】:

            为了跟进 Alex 的观点,Terracotta 解决方案不会将您的作业持久化到数据库中,它们将持久化在 Terracotta 分布式内存存储中。

            由于 Terracotta 将内存存储持久化到磁盘,因此这是将这些作业放入数据库的更有效版本。

            同时,它为您提供了一个纯 POJO 编程模型,因此您甚至不必处理 DB txns、ORM 等 - 除非您的特定工作负载碰巧与 DB 对话(在这种情况下,Terracotta在这里对您没有帮助或伤害,它只是帮助分发工作)。

            MasterWorker 模式将帮助您在网格上分配工作,您可以非常轻松地开始使用 DistributedExecutorService,提交工作如下所示:

            CompletionService executor = new DistributedCompletionService(new DistributedExecutorService("myTopologyName"));
            executor.submit(new MyRunnable(), null);
            ...
            Future f = executor.take();
            

            这是Quickstart guide in the master-worker implementation on the Terracotta Forge的链接。

            更重要的是 - Terracotta 不需要您实现 Serializable - 尽管您可以:)

            【讨论】:

            猜你喜欢
            • 2011-07-01
            • 2016-07-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-11
            • 2014-09-02
            • 1970-01-01
            • 2012-03-29
            相关资源
            最近更新 更多