如何避免在高可用性集群JBoss EAP中运行重复任务

我正在开发一个需要有一些后台工作的应用程序,例如在挂起的警报上发送电子邮件。 在独立配置中,作业已配置好并且可以与Spring调度程序和计划任务一起正常工作。 但我不知道如何使它们在具有高可用性的JBoss环境的集群上同步。 主要问题是避免不同节点上的作业同时运行。

我读过有关Quartz的内容:

http://quartz-scheduler.org/documentation/quartz-2.x/configuration/ConfigJDBCJobStoreClustering

但是,在高可用性方案中并没有建议:

永远不要在不同的机器上运行群集,除非它们的时钟使用某种forms的时间同步服务(守护进程)进行同步,这些服务定期运行(时钟必须在彼此的秒内)。 如果您不熟悉如何执行此操作,请访问http://www.boulder.nist.gov/timefreq/service/its.htm 。

到目前为止,我已经使用自制的阻塞系统解决了同步问题( 为什么我在使用Oracle的JPA中的悲观锁定不起作用 )。 但我想知道JBoss是否为这个当然常见的问题提供了一些解决方案。

您可以尝试HA Singleton,它是一个EJB Singleton,配置为仅在群集中的一个节点上运行。 然后,该单例可以使用EJB Timer Service来安排作业。 请参阅有关HA单例的文档: https : //access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6/html/Development_Guide/Implement_an_HA_Singleton.html