当前位置: 首页 > 知识库问答 >
问题:

生产中需要的后台作业框架

韩豪
2023-03-14

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

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

我想要的是:捆绑所有的jar,并将每个作业作为一个单独的进程运行。框架应该存储PID,并且应该能够根据需要管理(停止/强制终止)作业。这样,当我们想要更新JAR时,现有的进程将不会受到阻碍(但是,我们应该能够从UI停止现有的进程),并且也不会触及其他作业(运行与否)。

这样,在负载很高的情况下,我应该能够将机器添加到集群中并修改主配置文件,负载应该立即得到平衡。

我想要的:我应该能够为工作设置警报,在失败的情况下。如果有必要,作业应该有一个超时,它应该能够通知用户(可能通过电子邮件),或者当作业超过指定的阈值时应该强制停止作业。

共有1个答案

哈扬
2023-03-14

也许vertx能做到这一点。

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

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

Vert.x is not an application server. 
There's no monolithic Vert.x instance into which you deploy applications. 
You just run your apps wherever you want to.

Spring batch没有主从架构

由于vertx是驱动的,所以您可以轻松地创建主从架构。例如,在vertx实例中处理http请求,并根据请求的性质在不同的其他实例之间分派它们。

Spring batch在作业停滞/失败时没有内置的警报机制。

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.
 类似资料:
  • 7.1 ABP后台服务 - 后台作业和后台工人 7.1.1 简介 ABP提供了后台作业和后台工人,来执行应用程序中的后台线程的某些任务。 7.1.2 后台作业 由于各种各样的原因,你需要后台作业以队列和持久化的方式来排队执行某些任务。 例如: 用户等待执行一个长时任务。例如:某个用户按下了报表按钮生成一个需要长时间等待的报表。你添加这个工作到队列中,当报表生成完毕后,发送报表结果到该用户的邮箱。

  • 本文翻译自The Flask Mega-Tutorial Part XXII: Background Jobs 这是Flask Mega-Tutorial系列的第二十二部分,我将告诉你如何创建独立于Web服务器之外运行的后台作业。 本章致力于为应用程序中运行时间较长或复杂的异步任务进程进行优化。这些进程不能在请求的上下文中同步执行,因为这会在任务持续期间阻塞对客户端的响应。在第十章中,我将邮件的发

  • 我是Spring批的初学者,我用它开发了一个简单的项目。我得到了错误。 这是我的代码,我只有一个类: 感谢您帮助我找到此错误的主要原因

  • 关于处理程序,我读过,它们不存在很长时间的延迟,并将在系统重新启动后终止。所以他们不适合我的任务。 但是AlarmManager似乎是解决这个问题的一个很好的候选者,因为在允许的情况下,它们甚至在系统重启后仍然存在,并且可以重新运行应用程序。但是在Android文档中,警报管理器是用于必须在特定时间运行的任务(比如闹钟)。但我的任务每分钟都要执行。 然后是后台服务。这是更多的任务,如在后台下载,因

  • null 所以你可以不受任何限制地做背景工作。尽管由于这些原因您应该使用服务,但链接。 这是做背景工作的另一种方式(当然不是更好,但仍然是一种方式)吗?我错了吗?

  • 我有一个作业调度bash外壳脚本,其中包含以下代码: 我在后台运行这样的脚本: 我想用 kill -9 终止此调度程序进程。但是我第一次没有记录调度程序进程的 pid。相反,我使用作业来显示所有过程,但它什么也不显示。即使这个fg也不能将这个过程带到前台。 但是我认为这个调度程序进程仍然在运行,因为它仍然在继续分配java程序运行。我应该如何终止这个作业调度程序bash外壳脚本进程? 编辑:我使用