Как кварц гарантирует, что только один из узлов выполняет работу - PullRequest
1 голос
/ 26 марта 2019

Я хотел знать, как Quartz обеспечивает выполнение заданием только одного узла в кластере. Я знаю, что это можно сделать, установив некоторые свойства в quartz.properties, такие как JobStoreTX и т. Д., Но какая внутренняя реализация поддерживает это?

1 Ответ

1 голос
/ 07 июня 2019

Кластеризация в кварце выполняется с использованием базы данных, поэтому, если ваше хранилище заданий - JdbcJobStore, произойдет кластеризация.

Только планировщик с тем же именем расписания и с другим именем экземпляра будет участвовать и формировать кластер.

1 Поток ClusterManager будет использоваться для управления кластером. Этот поток гарантирует, что время последней проверки обновляется с заданным интервалом. Если в этом заданном интервале есть какое-либо несоответствие, экземпляр считается неработоспособным.

2 Кварц использует стандартный locksemaphore для кластеризации на уровне базы данных экземпляра кварца

StdRowLockSemaphore

В этом классе кварц использует пессимистическую блокировку строки, используя

select * from {}_Lock for update 

Если выпроверьте, что класс JobStoreSupport после завершения триггера, запускающего блокировку строки, будет снят после завершения транзакции.Таким образом, если два экземпляра планировщика завершатся для одного и того же триггера, то только один сможет преуспеть.

Надеюсь, это поможет вам соединить точки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...