Java 生产中需要的背景工作框架

Java 生产中需要的背景工作框架,java,spring,tomcat,spring-batch,batch-processing,Java,Spring,Tomcat,Spring Batch,Batch Processing,我们有一个需求,我们必须运行许多异步后台进程,这些进程访问DBs、Kafka队列等。到目前为止,我们正在使用Spring批处理和Tomcat(爆炸战争)来实现这一需求。然而,我们面临一些我无法用SpringBatch解决的问题。我正在考虑使用其他框架,但找不到任何解决我所有问题的框架 如果知道是否存在解决以下问题的框架,那就太好了: 由于Spring批处理在一个Tomcat容器(1个java进程)中运行,因此任何作业/步骤中的任何小更新都将导致重新启动Tomcat服务器。这会导致所有正在运行的作

我们有一个需求,我们必须运行许多异步后台进程,这些进程访问DBs、Kafka队列等。到目前为止,我们正在使用Spring批处理和Tomcat(爆炸战争)来实现这一需求。然而,我们面临一些我无法用SpringBatch解决的问题。我正在考虑使用其他框架,但找不到任何解决我所有问题的框架

如果知道是否存在解决以下问题的框架,那就太好了:

  • 由于Spring批处理在一个Tomcat容器(1个java进程)中运行,因此任何作业/步骤中的任何小更新都将导致重新启动Tomcat服务器。这会导致所有正在运行的作业硬停止,导致数据不完整/过时
  • 我想要的是:捆绑所有jar,并将每个作业作为单独的进程运行。框架应该存储PID,并且应该能够根据需要管理(停止/强制终止)作业。这样,当我们想要更新一个JAR时,现有的进程不会受到阻碍(但是,我们应该能够从UI停止现有的进程),并且不会涉及其他作业(运行或不运行)

    我已经看过Tomcat中JAR的热更新,但我怀疑是否在生产中使用这种机制

    子问题:OSGI会与Spring Batch集成吗?如果是这样,是否可以将每个作业作为一个单独的容器运行,并将所有jar嵌入其中

  • SpringBatch没有主从架构
  • 我想要的是:应该有一个master,其中指定了作业列表。应该有从机(worker),它们在配置文件中被指定为master。主设备中应该有一个调度器,当需要启动作业时,它应该为从设备分配一个作业(可能是负载平衡的,但不是必需的),并且从设备应该更新数据库。主设备应该能够从从从属设备发送和接收数据(启动/停止/终止任何作业,更新正在运行的作业等),以便在UI上显示

    这样,如果我有高负载,我应该能够将机器添加到集群中并修改主配置文件,负载应该立即得到平衡

  • Spring batch没有内置的工作暂停/故障警报机制
  • 我想要的是:我应该能够设置作业失败时的警报。如有必要,作业应该有一个超时,它应该能够通知用户(可能通过电子邮件),或者在作业超过指定阈值时强制停止作业。

    也许可以做到这一点

    由于Spring批处理在一个Tomcat容器(1个java进程)中运行,因此任何作业/步骤中的任何小更新都将导致重新启动Tomcat服务器。这会导致所有正在运行的作业硬停止,导致数据不完整/过时

    Vertx允许您构建微服务。每个vertx实例都能够与其他实例通信。如果你停止一个,其他人仍然可以工作(如果没有依赖者,例如如果你停止主人,奴隶将失败)

    SpringBatch没有主从架构

    由于vertx甚至是受驱动的,因此您可以轻松创建主从式体系结构。例如,在一个vertx实例中处理http请求,并根据请求的性质在几个其他实例之间分派它们

    Spring batch没有内置的工作暂停/故障警报机制

    在vertx中,您可以为每条消息设置超时并处理故障

    Sending with timeouts
    When sending a message with a reply handler you can specify a timeout in the DeliveryOptions.
    If a reply is not received within that time, the reply handler will be called with a failure.
    The default timeout is 30 seconds.
    
    Send Failures
    Message sends can fail for other reasons, including:
    There are no handlers available to send the message to
    The recipient has explicitly failed the message using fail
    In all cases the reply handler will be called with the specific failure.
    

    编辑还有其他框架可以在java中提供微服务。是其中之一,但我不能再多说了

    你看了吗?当我使用它的时候,它还没有准备好生产,但也许现在你需要看看这个框架吗?@stalet是的,我确实看过了。它在尝试运行作业的不同调度程序之间提供同步。然而,在文档中明确表示“不能”在不同的机器上运行谢谢你的信息!让我看看,然后回来。我需要一个用户界面。有可能将其与Spring批处理集成吗?我不熟悉Spring,但有一个官方示例和一些类似的文章
    Sending with timeouts
    When sending a message with a reply handler you can specify a timeout in the DeliveryOptions.
    If a reply is not received within that time, the reply handler will be called with a failure.
    The default timeout is 30 seconds.
    
    Send Failures
    Message sends can fail for other reasons, including:
    There are no handlers available to send the message to
    The recipient has explicitly failed the message using fail
    In all cases the reply handler will be called with the specific failure.