我有一个jvm进程,每隔X分钟唤醒一个线程。
如果条件为真->它将启动作业(JobA)。

另一个jvm进程几乎相同,但是如果条件为真-
    它向消息代理抛出一条消息,该消息代理触发另一台服务器(JobB)中的作业。

现在,为避免SPOF问题,我想在我的云中添加此计算机的另一个实例。
但是比我想确保每次都运行JobA的单个实例要多。

我有什么选择?

最佳答案

有许多模式可以解决此常见问题。您需要根据自己的具体情况,并根据哪个因素在您的案例中具有更大的权重(性能,正确性,容错性,是否允许失火等)进行选择。这两个解决方案组是:


“ Quartz”方式:您可以使用Quartz库中的JDBCStore(部分出于这个原因而设计)。它允许多个节点进行通信,并在彼此之间共享状态和工作负载。该解决方案以一些额外的编码和在节点之间建立共享数据库(我认为有9个表)为代价,为您提供了一个理想的解决方案。
另外,您的节点可以自己负责分发本身:锁定资源(例如,数据库中的单个记录)就足以决定谁负责执行该迭代。但是,共享以前的状态将需要更多的工作。

10-08 16:12