Являются ли JobListeners глобальными в Кварцевом кластере?
Я запускаю кластерный экземпляр Quartz в контексте приложения Java EE. Один из узлов (выбранных случайным образом) в приложении Java EE запустит серию заданий Quartz, которые должны быть выполнены немедленно (как объяснено в этом посте); непосредственно перед запуском каждого задания, JobListener, связанный с этим заданием, добавляется в ListenerManager планировщика.
Если я правильно понимаю внутреннюю работу Quartz, то узел, который фактически выполняет каждое задание, будет выбран случайным образом из доступных узлов. Если это так, то как можно вызывать методы слушателя, если слушатель был создан в узле, отличном от того, который выполнил задание? Можно ли предположить, что список слушателей в ListenerManager является глобальным и одинаковым для всех узлов кластера? Или каждый узел имеет свой собственный ListManager со своими слушателями?
1 ответ
Согласно документации кварца:
Слушатели регистрируются в планировщике во время выполнения и НЕ хранятся в хранилище заданий вместе с заданиями и триггерами. Это потому, что слушатели обычно являются точкой интеграции с вашим приложением. Следовательно, каждый раз, когда ваше приложение запускается, слушатели должны быть перерегистрированы в планировщике.
См. http://quartz-scheduler.org/files/documentation/Quartz-2.1.x-Documentation.pdf
Надеюсь это поможет
Я нашел еще полезную информацию в бесплатной онлайн-книге:
Использование глобальных слушателей в кластерной среде
Вы по-прежнему можете использовать прослушиватели заданий и триггеров в кластерной среде. Единственная путаница возникает, когда вы пытаетесь понять, какой экземпляр Scheduler получит метод обратного вызова.
Самый простой способ запомнить это - то, что Listener будет уведомлен в экземпляре Scheduler, где выполняется задание или триггер. Поскольку задание и триггер выполняются только на одном узле, Слушатель уведомляется на этом узле.