Должен ли я создать новую кварцевую работу и триггер или одну работу и много триггеров?
-
06-07-2019 - |
Вопрос
Я хочу использовать кварц для составления расписания электронных писем, но я не уверен, какой подход выбрать:
<Ол>Мне нужно передать сообщение / получателя и т. д. в любом случае, и я не уверен, начнёт ли создание кучи заданий добавлять значительные накладные расходы памяти, поскольку вполне возможно, что будут запланированы тысячи писем.
Обновление . Эти электронные письма будут планироваться пользователями, а не мной, поэтому я буду добавлять их программно во время выполнения, они не запланированы для выхода в конкретное время.
Решение
Кварц предназначен для обработки десятков тысяч триггеров. Основным ограничением масштабируемости здесь является пространство, доступное в вашем JobStore. JDBCJobStore, поддерживаемый разумной базой данных, должен обрабатывать сотни тысяч триггеров.
Если можно настроить параметры одного задания с помощью карты данных задания триггера, создайте одно задание и один триггер для каждого электронного письма. Кварц периодически опрашивает магазин, чтобы найти триггеры, которые готовы к срабатыванию. Кварц предназначен для безопасной обработки произвольно больших наборов результатов из этого запроса.
Что имеет значение, и это действительно не имеет ничего общего с самим Quartz, так это то, что у вас есть необходимая пропускная способность для выполнения пиковых нагрузок. Если пользователи склонны планировать рассылку писем, вам необходимо убедиться, что у вас есть вычислительные ресурсы для доставки писем. Это будет включать пропускную способность сети, обработку и достаточное количество рабочих потоков, настроенных для использования доступных ресурсов.
Обратите внимание, что вы можете настроить то, что должен делать Quartz с триггером, если он слишком сильно отстает в выполнении заданий. Вы можете продолжать пытаться, пропустить триггер и т. Д.
Другие советы
Триггеры должны быть основаны на расписании? Вы можете использовать CronTrigger , чтобы настроить более сложное расписание на основе времени а не отдельные триггеры.
Вы можете подумать об организации очереди или иным образом группировать набор электронных писем и иметь одну, или, может быть, несколько периодических (или запланированных) работ, которые затем заботятся о «пакете».
Можно даже поставить в очередь задание Quartz на электронную почту для сбора и отправки коллекции работников.
Я бы не рекомендовал тысячи заданий / триггеров Quartz - это просто не предназначение инструмента (IMHO).
<Ч>РЕДАКТИРОВАТЬ: в ответ на комментарий ниже:
Я бы не рекомендовал тысячи заданий / триггеров Quartz, когда они используются как часть среды, выполняющей приложение в той же JVM. Задания / триггеры будут конкурировать за ресурсы с остальным приложением.
Я бы порекомендовал одну работу и один триггер. Поместите запросы электронной почты в таблицу базы данных и попросите кварцевую работу искать новые электронные письма для отправки.