3

我们有许多批量作业,今天通过cron表达式在单个应用程序中安排。我们希望更多地分离这些工作,并将其转移到春季云任务。每个春季云任务触发器是否需要一个JVM进程?

但是阅读文档[1],我得出结论,我必须使用triggertask(源代码),然后发送TaskLaunchRequesttasklauncher(接收器)以最终启动新过程。

这意味着(如果我只有一个任务/批)我需要至少以下JVM进程运行以触发一个新的过程:

  • 流服务器
  • triggertask(源)
  • tasklauncher (sink)

OK,流服务器和tasklauncher将为任何即将到来的任务共享,但triggertask只能为单个任务使用cron定义,因此必须复制fo r任何即将到来的任务定义。所以我需要至少一个“保姆流程”来完成每项任务?

真的吗?这听起来像是一个巨大的矫枉过正......从我的角度来看,我期望cron调度是任务定义的核心功能,因此唯一需要的就是流量服务器。

我理解这是否正确或有什么我错过了?春季云环境中有更简单的方法吗?我真的很喜欢在需要时让流服务器启动新的JVM的想法,但所有这些额外的过程真的觉得是错误的方法。

如果这应该在CloudFoundry上运行,例如那么这意味着我有一个cron调度器用于单个作业,成本为35美元/月(因为从Java BuildPack 4.0开始,只有512MB的JVM进程将不再启动[2]) - 这是一个昂贵的cron定义...

[1] https://github.com/spring-cloud/spring-cloud-stream-app-starters/tree/master/triggertask/spring-cloud-starter-stream-source-triggertask [2] https://www.cloudfoundry.org/just-released-java-buildpack-4-0/

回答

3

TL; DR;不要这样做,要么编写自己的调度逻辑,要么将Spring云数据流的REST API与企业调度程序集成。

加长版
让我给这个有点历史的,然后提供该怎么做我的思想。

当Spring Cloud Task项目启动时,我们想创建一些示例应用程序来说明许多不同用例的任务使用情况。根据收到的消息,轻松启动任务的能力是我们确定要创建样本的一个用例。您可以看到样本herehere

当Spring云数据流(SCDF)出现时,我们希望能够在的某些方式中解决的其中一个用例是调度任务。问题是我们希望SCDF服务器是无状态的(因为它本身就是云本地微服务)。这意味着嵌入调度程序不是一个选项。从那里我们感觉到,与每个平台为调度提供的内容相结合是最有意义的。但是它也需要最多的工作。这种方法实际上是在我们的路线图上,但我们还没有让用户反馈将该功能推到列表上。

我们在短期内解决这个问题的解决方案就是您今天在文档中找到的解决方案。将这些示例应用程序与trigger-task应用程序一起使用,该应用程序可处理拼图的cron部分,以在给定时间启动任务。

我个人的建议是,如果你没有一个你已经使用过的调度器,写一个启动应用程序,使用Quartz或其他内部调度程序(Spring Scheduler等)调用SCDF API来启动任务给定的时间表。鉴于可用的DataFlowTemplate,编写自己的调度程序应该很简单。

+0

非常感谢这些细节!所以,如果我理解正确,将来会有一个本地调度程序集成,在我们的情况下,从CF中反正呢?我可以遵循什么问题吗? – domi

+1

嗨,@Domi。具体来说,CF中有一个CF-Scheduler MVP,可以通过SCDF的REST-API调度和启动任务。这个想法是在SCDF中定义DSL,并使用CF-Scheduler中的REST-API将其安排在期望的日期/时间或cron中。 CF计划程序团队大致针对8月份的GA版本。 我们还计划与SCDF直接交互CF调度程序(通过它的API和服务绑定)。我们的仪表板将能够为每个任务提供日期/时间和cron表达式。 –

相关问题