【发布时间】:2017-12-19 13:56:24
【问题描述】:
今天,我们有许多批处理作业,它们通过单个应用程序中的 cron 表达式进行调度。我们希望更多地隔离这些工作,因此将它们移至 Spring Cloud 任务。
但是阅读文档 [1],我得出的结论是,我必须使用 triggertask(源),然后将 TaskLaunchRequest 发送到 tasklauncher(接收器)以最终启动新进程.
这意味着(如果我只有一个任务/批处理)我至少需要运行以下 JVM 进程来触发一个新进程:
- 流服务器
- 触发任务(来源)
- 任务启动器(接收器)
好的,流服务器和 tasklauncher 将为任何即将到来的任务共享,但 triggertask 只能为单个任务获取 cron 定义,因此必须为任何即将到来的任务定义进行复制。所以每项任务至少需要一个“保姆进程”?
真的吗???这听起来有点矫枉过正......从我的角度来看,我希望 cron 调度是任务定义的核心功能,所以唯一需要的是流服务器。
我是否理解正确或有什么我遗漏的?在 Spring Cloud 环境中是否有更简单的方法可以做到这一点?我真的很喜欢让流服务器在需要时启动新的 JVM 的想法,但是所有这些额外的过程确实感觉是错误的方法。
如果这应该在 CloudFoundry 上运行,例如http://run.pivotal.io 那么这意味着我有一个用于单个作业的 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/
【问题讨论】:
标签: spring cloud-foundry spring-cloud spring-cloud-stream spring-cloud-task