我们有许多批量作业,今天通过cron表达式在单个应用程序中安排。我们希望更多地分离这些工作,并将其转移到春季云任务。每个春季云任务触发器是否需要一个JVM进程?
但是阅读文档[1],我得出结论,我必须使用triggertask
(源代码),然后发送TaskLaunchRequest
到tasklauncher
(接收器)以最终启动新过程。
这意味着(如果我只有一个任务/批)我需要至少以下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/
非常感谢这些细节!所以,如果我理解正确,将来会有一个本地调度程序集成,在我们的情况下,从CF中反正呢?我可以遵循什么问题吗? – domi
嗨,@Domi。具体来说,CF中有一个CF-Scheduler MVP,可以通过SCDF的REST-API调度和启动任务。这个想法是在SCDF中定义DSL,并使用CF-Scheduler中的REST-API将其安排在期望的日期/时间或cron中。 CF计划程序团队大致针对8月份的GA版本。 我们还计划与SCDF直接交互CF调度程序(通过它的API和服务绑定)。我们的仪表板将能够为每个任务提供日期/时间和cron表达式。 –