群集环境中的Java Batch作业

问题描述 投票:4回答:3

我们有一个包含2个JBOSS节点的集群。我们有一个批处理作业,它将所有用户详细信息从活动目录加载到数据库。这项工作每天都在运行。它之前在非集群环境中运行,因此我们将其设计为单例。现在我们有一个集群环境,我不知道什么是实现相同结果的最佳方法。我希望批处理作业每天只运行一次。我们使用spring和hibernate,然后看了Spring批处理。我无法对我的问题得到任何简明的答案。

如果你在集群环境中实现批处理,请问有谁可以告诉我吗?在这种情况下,最好的解决方案是什么?

java jboss cluster-computing batch-processing spring-batch
3个回答
5
投票

我们通过MQ从外部触发和启动作业来实现这一点(启动作业的http请求也可以工作)。调度程序将消息放入队列中,即使我们有'n'个节点侦听队列,一个节点也会收到消息并根据其内容启动作业。您也可以使用HTTP执行此操作。

对此的真正“解决方案”是将批处理作业“外部”安排,而不是通过内部cron触发器。实际的启动机制是次要的。


1
投票

还要考虑https://github.com/willschipp/spring-batch-cluster的特点

  • 批处理作业存储库的后写
  • 群集中的批处理HA(执行作业的自动停止和故障转移)

0
投票

通常,从事务系统中外部化/隔离批处理作业有时是个好主意,因此它们不会干扰可用性或性能。话虽这么说,如果有充分的理由在集群应用程序中嵌入批处理作业(简单性,代码重用等),那么除了已经提到的解决方案之外,ShedLock是一个很好的选择。

关于它的价值,请注意关于qazxsw poi的博客文章。

© www.soinside.com 2019 - 2024. All rights reserved.