如何限制Quartz作业的总数和群集中单个节点上运行的数量

时间:2014-01-07 17:10:40

标签: grails cluster-computing quartz-scheduler

如果我有一个3节点集群。我需要按如下方式运行特定的Quartz作业:

  • 在给定的时间内,需要运行许多(比如30个)这些工作。
  • 限制同时合并的所有集群上运行的Quartz作业的数量(由于系统资源,为10)
  • 限制同时在单个服务器上运行的Quartz作业的数量(由于CPU负载,为5)

如何将同时作业实例的总数限制为10,将任何一台主机上运行的数量限制为5?这甚至可能吗?

请注意,我不能限制线程数,因为我有其他需要同时在同一台服务器上运行的作业,而且那些也需要线程。

感谢。

2 个答案:

答案 0 :(得分:1)

虽然不完全限制连续作业计数,但您可以使用线程池配置限制最大线程数。请参阅Quartz Configuration Reference

Grails Quartz插件附带一个方便的脚本来安装配置文件:
grails install-quartz-config

  

<强> org.quartz.threadPool.threadCount

     

可以是任何正整数,但你应该只知道   1到100之间的数字非常实用。这是数量   可用于并发执行作业的线程。如果你   只有一些工作每天开几次,然后1个线程   很多!如果你有成千上万的工作岗位,每个工作岗位都有很多工作   分钟,那么你可能想要一个更像50或100的线程数   (这在很大程度上取决于你的工作所做的工作的性质,   和你的系统资源!)。

答案 1 :(得分:1)

我认为我找到了答案。

答案是运行两个(或更多)单独的Quartz调度程序。第一个调度程序中的作业将为第二个调度程序调度作业,第二个调度程序将运行它们。然后第二个调度程序可以限制为(在这种情况下)5个线程,尽管第一个调度程序可能有更多。

有关此内容的一些信息,请参阅 http://quartz-scheduler.org/documentation/quartz-2.2.x/cookbook/MultipleSchedulers

但是我不知道如何在Grails中实现两个单独的Quartz Scheduler。如果有人可以提供帮助,我会很感激。虽然没有答案,但是现有Stack Overflow问题存在问题。