繁体   English   中英

Java 集群环境下的批处理作业

[英]Java Batch job in cluster environment

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

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

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

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

还考虑具有以下特点的https://github.com/willschipp/spring-batch-cluster

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

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

不管它的价值如何,请注意一篇关于集群环境中的批处理作业的博客文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM