0

我正在开发一个使用 Quartz 来安排作业的应用程序。要计划的作业是通过读取属性文件以编程方式创建的。我的问题是:如果我有几个节点的集群,其中哪些应该以编程方式创建计划?只有其中之一?或者也许全部?

4

3 回答 3

1

我在一个网络应用程序中使用了石英,其中用户可以创建执行某些任务的石英作业。

只要至少每个工作的工作名称不同,我们在那个应用程序上就没有问题。你也可以有不同的组名,如果我没记错的话,jobgroup+jobname 组合形成一个工作键。

无论如何,我们从不同节点创建运行作业没有问题,但当时的石英(大约 6 个月前,我不相信这已经改变,但我不确定)没有提供停止集群中作业的可能性,它只能停止执行停止命令的节点上的作业。

相反,如果您只想在应用程序启动时创建固定数量的作业,则最好将该作业委托给其中一个节点,因为将从每个节点的相同属性文件中读取作业名称/组,并且会出现冲突。

于 2013-01-10T13:50:55.390 回答
0

您是否尝试过在所有这些上创建它们?我认为您会因为名称重复而产生一些冲突。所以我认为其中一位成员应该在启动期间创建时间表。

于 2013-01-10T13:29:03.627 回答
0

如果像您说的那样在属性中预定义它们,则您应该只为集群设置一个系统调度作业。如果所有系统都这样做,您将不必要地重新创建作业,并且如果每个服务器都创建或删除相同的作业和触发器,则可能会将它们置于奇怪的状态。

您可以只将作业的属性部署到一台服务器,然后只有一台服务器会尝试创建它们。

您可以制作一个单独的应用程序来安排作业,并且只运行一次。

如果这些是 Web 服务器,您可以创建一个简单的安全 REST API 来触发调度过程。然后,您可以编写一个自动化脚本来访问 API,并在部署过程中或任何您需要的时候启动作业调度。如果您在负载均衡器后面有多台服务器,它应该只转到一台服务器并安排石英将保存到数据库支持的作业存储的作业。集群中的其他节点将在下次从数据库更新时接收它们。

于 2013-07-25T11:18:49.877 回答