0

我有一个相同的软件,在两台服务器上运行。这个软件中的每一个都在特定时间运行 Quartz 午餐,一个要执行的工作。假设两台服务器的时钟同步,这两个工作将同时开始做同样的事情......我怎样才能做到只有一个工作运行而另一个不运行?

我也有一个数据库,我的第一个想法是制作一个表格,在作业开始时在其中插入一行,并验证当天是否有记录(如果有,则跳过作业执行......)但同样,如果服务器上的时钟完全同步,那么两个应用程序将同时写入和检查,使这种机制毫无用处。

我还可以实施什么其他解决方案?

4

1 回答 1

2

集群他们!

石英簇
(来源:quartz-scheduler.org

基本上,您的两个 Quartz 调度程序都使用相同的数据库进行同步,并且只会在一台(空闲)机器上运行作业。

但同样,如果服务器上的时钟完全同步,那么两个应用程序将同时写入和检查,使得这种机制毫无用处。

这正是 Quartz 所做的!然而,它使用了一些数据库锁定/事务机制,因此当一个实例获取新作业时,第二个实例必须等待。


假设两台服务器的时钟同步

它们必须具有同步时钟才能在集群中运行:

永远不要在单独的机器上运行集群,除非它们的时钟使用某种形式的时间同步服务同步

于 2012-10-03T13:25:42.127 回答