我有一个相同的软件,运行在2台服务器上。这款软件中的每一个都运行在特定时间提供午餐的Quartz将被执行的一项工作。 假设两台服务器的时钟同步,这两个作业将同时开始做同样的事情... 我该怎么做,只有一个工作运行,另一个不工作?如何避免这种情况?
我也有一个数据库,我的第一个想法是创建一个表,在作业开始时插入一行,还要验证当天是否有记录(如果是,则跳过作业执行... ) 但是,如果服务器上的时钟完全同步,那么这两个应用程序将同时进行写入和检查,从而无用此机制。
我可以实现哪些其他解决方案?
我有一个相同的软件,运行在2台服务器上。这款软件中的每一个都运行在特定时间提供午餐的Quartz将被执行的一项工作。 假设两台服务器的时钟同步,这两个作业将同时开始做同样的事情... 我该怎么做,只有一个工作运行,另一个不工作?如何避免这种情况?
我也有一个数据库,我的第一个想法是创建一个表,在作业开始时插入一行,还要验证当天是否有记录(如果是,则跳过作业执行... ) 但是,如果服务器上的时钟完全同步,那么这两个应用程序将同时进行写入和检查,从而无用此机制。
我可以实现哪些其他解决方案?
Quartz cluster http://quartz-scheduler.org/images/documentation/2.x/quartz_cluster.png
基本上都你的Quartz调度使用相同的数据库进行同步,将只有一个(空闲)机器上运行的工作。
但是,如果服务器上的时钟完全同步,那么这两个应用程序将同时进行写入和检查,从而无用此机制。
这正是石英所做的!然而,它使用一些数据库锁定/事务机制,以便当一个实例获取新作业时,第二个必须等待。
。假定两个服务器具有时钟同步
他们必须有同步的时钟在集群中运行:
从不运行在单独的计算机集群,除非它们的时钟使用某种形式的时间同步服务进行同步
完美!这是最好的解决方案。谢谢 – Alex
如果Quartz在应该工作时正在进行工作,它应该将其工资对接。 :-) –
斯蒂芬让我大吃一惊。幽默的秘诀是惊喜! – CKing