每个春季云任务触发器是否需要一个JVM进程?
作者:互联网
今天,我们有许多批处理作业,这些批处理作业是通过cron表达式在单个应用程序中安排的.我们想更多地隔离这些工作,因此将它们转移到春季云任务.
但是阅读文档[1]得出的结论是,我必须使用TriggerTask(源),后者又将TaskLaunchRequest发送到Tasklauncher(接收器)以最终启动新过程.
这意味着(如果我只有一个任务/批处理)我至少需要运行以下JVM进程才能触发一个新进程:
>流服务器
> triggertask(源)
>任务启动器(接收器)
好的,流服务器和任务启动器将为任何即将到来的任务共享,但是triggertask只能为单个任务使用cron定义,因此必须为任何即将到来的任务定义复制.因此,每个任务至少需要一个“保姆流程”?
真???从我的角度来看,我希望cron调度是任务定义的核心功能,因此唯一需要的是流服务器.
我了解这个正确吗,或者我错过了什么?在春季云环境中,有没有更简单的方法可以做到这一点?我真的很喜欢让流服务器在需要时启动新的JVM的想法,但是所有这些附加过程确实感觉是错误的方法.
如果这应该在CloudFoundry上运行,例如http://run.pivotal.io,那么这意味着我有一个cron调度程序,每个任务的成本为35 $/ Mth(因为仅512MB的Java BuildPack 4.0 JVM Process无法启动[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/
解决方法:
TL; DR;不要这样做,要么编写自己的调度逻辑,要么将Spring Cloud Data Flow的REST API与企业调度程序集成在一起.
长版
让我对此进行一些历史介绍,然后对如何做发表自己的看法.
当Spring Cloud Task项目启动时,我们想要创建许多示例应用程序,以说明在许多不同用例中任务的用法.响应收到的消息而轻松启动任务的能力是我们确定要创建样本的一个用例.您可以看到示例here和here.
当Spring Cloud Data Flow(SCDF)出现时,我们希望能够以某种方式解决的用例之一就是计划任务.问题是我们希望SCDF服务器是无状态的(因为它本身是云本地微服务).这意味着无法嵌入调度程序.从那里,我们感到与每个平台提供的计划集成最有意义.但是,这也需要最多的工作.这种方法实际上在我们的路线图上,但是我们没有用户反馈将该功能推到更高的位置.
我们可以在短期内解决此需求的解决方案就是您今天在文档中找到的解决方案.这些示例应用程序与处理任务难题的触发任务应用程序结合使用,可以在给定时间启动任务.
我个人的建议是,如果您还没有使用的调度程序,请编写一个使用Quartz或其他内部调度程序(Spring Scheduler等)的Boot应用程序来调用SCDF API以给定的调度程序启动任务.鉴于有DataFlowTemplate
,编写您自己的调度程序应该很简单.
标签:spring-cloud-task,cloudfoundry,spring-cloud,spring-cloud-stream,spring 来源: https://codeday.me/bug/20191111/2017967.html