我尝试确定将作业部署到群集环境时需要考虑的所有事项。
我现在不关心并行处理或其他缩放事项;我对如何使一切行为就好像它在一台服务器上运行更感兴趣。
因此,我已经确定触发工作应该是done via messaging。
现在让我开始循环的是如何在群集部署中使用Spring Batch Admin UI(即使它是手动解决方案)。从JobExplorer获取作业信息似乎是关键之一。
Will Schipp的spring-batch-cluster是否会预测答案,或者是否有更多商定的社区答案?
或者我甚至不需要担心,因为JobRepository将从共享数据库中拉出来?
或者我是否需要将作业执行信息发布到消息队列以更新单独的作业存储库?
还有其他我应该关注的事情,比如jobIncrementers?
顺便说一句,如果我不清楚我是春季批次的总菜鸟,现在让它知道: - )答案 0 :(得分:2)
Spring XD(http://projects.spring.io/spring-xd/)提供了一个分布式运行时,用于为批处理作业部署容器集群。它管理作业存储库,并提供部署,启动,重启等集群上作业的方法。它解决了容错问题(例如,如果节点出现故障,重新部署作业)以及维护集群Spring Batch环境所需的许多其他必要功能。
答案 1 :(得分:0)
我添加了我认为我们将要推出的答案,除非有人评论为什么它会愚蠢。
如果将Spring Batch配置为对JobExplorer
将使用的所有DAO使用共享数据库,则运行是一个群集并不是一个问题。
我们计划使用Quarts作业创建将放入队列的JobRequest
条消息。第一个获取消息的服务器实际上将启动Spring Batch作业。
监控正在运行的作业不会成为问题,因为JobExplorer
从数据库中获取了所有信息,并且它看起来不像是缓存信息,所以我们赢了& #39;在那里遇到集群问题。
所以直接回答问题......
Will Schipp的春季批量集群项目是答案,还是有更多商定的社群答案?
那里有一些很酷的东西,但刚刚开始时似乎过度杀戮。我不确定是否有"社区"同意回答。
或者我甚至不需要担心,因为
JobRepository
将从共享数据库中拉出来?
这似乎是正确的。如果使用共享数据库,则群集中的所有节点都可以读取和写入所有作业信息。您只需要一种方法来确保计时器作业不会被触发多次。 Quartz already has a cluster solution
或者我是否需要将作业执行信息发布到消息队列以更新单独的作业存储库?
同样,不应该这样做,因为执行信息被写入数据库。
还有其他我应该关注的事情,比如
jobIncrementers
?
看起来这不是一个问题。使用JDBC DAO实现时,它使用数据库序列来增加值。