我们今天有许多批处理作业,它们是通过单个应用程序中的 cron 表达式安排的。我们希望更多地隔离这些工作,因此将它们转移到 Spring Cloud 任务中。
但是阅读文档 [1],我得出的结论是,我必须使用一个triggertask
(源),然后将一个(源)发送TaskLaunchRequest
到一个tasklauncher
(接收器)以最终启动新进程。
这意味着(如果我只有一个任务/批次)我至少需要运行以下 JVM 进程来触发一个新进程:
- 流服务器
- 触发任务(来源)
- 任务启动器(接收器)
好的,流服务器和任务启动器将为任何即将到来的任务共享,但 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/