2012-10-03 241 views
0

我有一个相同的软件,运行在2台服务器上。这款软件中的每一个都运行在特定时间提供午餐的Quartz将被执行的一项工作。 假设两台服务器的时钟同步,这两个作业将同时开始做同样的事情... 我该怎么做,只有一个工作运行,另一个不工作?如何避免这种情况?

我也有一个数据库,我的第一个想法是创建一个表,在作业开始时插入一行,还要验证当天是否有记录(如果是,则跳过作业执行... ) 但是,如果服务器上的时钟完全同步,那么这两个应用程序将同时进行写入和检查,从而无用此机制。

我可以实现哪些其他解决方案?

+1

如果Quartz在应该工作时正在进行工作,它应该将其工资对接。 :-) –

+0

斯蒂芬让我大吃一惊。幽默的秘诀是惊喜! – CKing

回答

2

Cluster 'em!

Quartz cluster http://quartz-scheduler.org/images/documentation/2.x/quartz_cluster.png

基本上都你的Quartz调度使用相同的数据库进行同步,将只有一个(空闲)机器上运行的工作。

但是,如果服务器上的时钟完全同步,那么这两个应用程序将同时进行写入和检查,从而无用此机制。

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


。假定两个服务器具有时钟同步

他们必须有同步的时钟在集群中运行:

从不运行在单独的计算机集群,除非它们的时钟使用某种形式的时间同步服务进行同步

+0

完美!这是最好的解决方案。谢谢 – Alex

相关问题