Quartz периодически запускает задание несколько раз при использовании JobStoreTX

Я использую java quartz (2.3.1), и у меня есть установка, в которой я использую postgres в качестве хранилища заданий, и у меня есть 3-4 машины, на которых работает планировщик (вертикальное масштабирование). Я хочу, чтобы rds действовали как источник истины, и если у меня есть работа с расписанием повторения каждые 1 час, я хочу, чтобы она выполнялась на любой из машин. Меня не волнует, на какой из них он работает, пока это одна машина, запущенная в этот час.

Я заметил, что это работает очень хорошо большую часть времени, но недавно у меня был триггер, который запускается раз в час, и примерно раз в два дня я вижу, как срабатывают две мои машины. Я заметил, что мое свойство isClustered имеет значение false, которое я теперь установил в значение true, но я не уверен, как это могло бы помочь, поскольку, если бы это было проблемой, эта проблема возникала бы в 100% случаев, а не редко. Может ли кто-нибудь сказать мне, что я должен изучить, чтобы решить эту проблему?


person Soccergods    schedule 05.05.2020    source источник
comment
Это может помочь stackoverflow.com/questions/58513804/. Также не забудьте назначить отдельный instanceId для всех кластерных узлов.   -  person user06062019    schedule 06.05.2020
comment
Почему требуется отдельный идентификатор экземпляра?   -  person Soccergods    schedule 16.08.2020
comment
Поскольку кластеризация работает с группой экземпляров и экземпляром, я бы. Если вы используете один и тот же идентификатор экземпляра, планировщик кварца перезапишет запись, сделанную в базе данных из другого экземпляра, с тем же I, поэтому, чтобы преодолеть такой сценарий, используя другой или автоматически сгенерированный рекомендуется использовать идентификатор экземпляра. Обратите внимание, что кварц выполняет кластеризацию с использованием базы данных.   -  person user06062019    schedule 16.08.2020


Ответы (1)


org.quartz.jobStore.isClustered = true

гарантирует, что к триггеру применяются правильные блокировки строк базы данных перед его выбором; если это свойство было ложным, оба экземпляра могут активировать один триггер (условие гонки), прежде чем можно будет изменить статус этого триггера.

http://www.quartz-scheduler.org/documentation/quartz-1.8.6/configuration/ConfigJDBCJobStoreClustering.html

person vamsikurre    schedule 15.08.2020