我正在执行一项计划的工作,该工作将按一定的时间间隔运行(例如,每天一次在下午1点),并通过Cron计划。我正在使用Java和Spring。

编写计划好的工作很容易-它确实做到了:从db中抓取人员名单,将为每个人员进行某些计算并触发一条消息。

我正在本地和测试中处理单节点环境,但是当我们投入生产时,它将是多节点环境(带有负载均衡器等)。我担心的是多节点环境将如何影响预定作业?

我的猜测是,我可能(或很有可能)最终会触发重复消息。


机器1:抓取人员清单,进行计算
机器2:抓人名单,进行计算
机器1:触发消息
机器2:触发讯息


我的猜测正确吗?

为避免上述问题,推荐的解决方案是什么?我是否需要创建一个主/从分布式系统解决方案来管理多节点环境?

最佳答案

例如,如果您有三个Tomcat实例,每个实例在Apache后面进行负载均衡,并且在每个实例上运行应用程序,那么您将拥有三个不同的触发器,并且您的作业将运行三次。我认为除非采用某种机制来分配作业的各个部分,否则您不会拥有一个具有分布式作业执行功能的多节点环境。
如果您尚未查看此项目,请浏览Spring XD。它处理Spring Batch Jobs,并且可以在distributed mode中运行。

09-05 18:51