5

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

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

4

3 回答 3

6

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

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

于 2012-02-26T16:22:21.573 回答
0

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

  • 批处理作业存储库的后写
  • 集群中批处理的 HA(执行作业的自动停止和故障转移)
于 2014-10-10T10:08:13.130 回答
0

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

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

于 2017-10-11T12:37:31.900 回答