У меня есть слой идентичных серверов приложений за балансировщиком нагрузки.По эксплуатационным причинам у меня есть ограничение, что конфигурация приложения на обоих серверах приложений должна быть одинаковой, чтобы можно было легко добавлять и удалять узлы.Все серверы приложений имеют общую базу данных.Серверы приложений не / не будут кластеризованы.
До сих пор это работало нормально, но теперь я хотел бы иметь запланированное задание, которое выполняется точно на одном из серверов приложений.Все серверы приложений будут работать в Quartz и иметь одинаковое расписание для выполнения заданий.Триггер сработает на каждом сервере приложений, но я бы хотел, чтобы только один сервер приложений фактически выполнял задание - по сути, все они запускаются, и только один фактически запускается, остальные серверы приложений просто игнорируют задание.Идея заключается в том, что если мы потеряем сервер приложений, другой будет работать вместо этого, а если мы добавим новые серверы приложений, они по очереди будут выполнять задания.
Я планировал сделать этоналичие в базе данных таблицы «блокировки работы», которую все серверы приложений будут читать до начала работы и запускать только в том случае, если работа «разблокирована».Сервер приложений, который сначала выполняет обновление таблицы, по существу блокирует другие, обновляя таблицу до рабочего состояния / сбрасывая ее в конце работы.
Прежде чем я соберу это, я был бы признателен за некоторый вкладот тех, у кого больше опыта работы с Кварцем:
а) Могу ли я подключить это поведение к Кварцу, чтобы его не приходилось делать отдельно для каждой работы?Т.е. разработчики могут добавлять новые задания, не беспокоясь о блокировке заданий, поскольку она абстрагирована.
b) Предоставляет ли Quartz какие-либо встроенные механизмы для достижения чего-то похожего на вышеописанное, поэтому мне не нужно его самому катить?
Спасибо!