Должен ли я создать новую кварцевую работу и триггер или одну работу и много триггеров? - PullRequest
4 голосов
/ 05 ноября 2008

Я хочу использовать кварц для составления расписания электронной почты, но я не уверен, какой подход выбрать:

  1. Создание новой работы и запуск всякий раз, когда электронная почта запланирована ИЛИ
  2. Создайте отдельное задание и создайте новый триггер каждый раз, когда запланировано электронное письмо

Мне нужно передать сообщение / получателя и т. Д. В любом случае, и я не уверен, начнёт ли создание кучи заданий добавлять значительные накладные расходы памяти, поскольку вполне возможно будет запланировано тысячи писем.

Обновление : Эти электронные письма будут планироваться пользователями, а не мной - поэтому я буду добавлять их программно во время выполнения, они не запланированы для выхода в любое конкретное время.

Ответы [ 4 ]

7 голосов
/ 05 ноября 2008

Кварц предназначен для обработки десятков тысяч триггеров. Основным ограничением масштабируемости здесь является пространство, доступное в вашем JobStore. JDBCJobStore, поддерживаемый разумной базой данных, должен обрабатывать сотни тысяч триггеров.

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

Что имеет значение - и это действительно не имеет никакого отношения к самому Кварцу - то, что у вас есть необходимая пропускная способность для выполнения пиковых нагрузок. Если пользователи склонны планировать рассылку писем, вам необходимо убедиться, что у вас есть вычислительные ресурсы для доставки писем. Это будет включать пропускную способность сети, обработку и достаточное количество рабочих потоков, настроенных для использования доступных ресурсов.

Обратите внимание, что вы можете настроить то, что должен делать Quartz с триггером, если он слишком сильно отстает в выполнении заданий. Вы можете продолжать пытаться, пропустить курок и т. Д.

1 голос
/ 05 ноября 2008

Триггеры должны быть основаны на расписании? Вы можете использовать CronTrigger для настройки более сложного расписания на основе времени, а не отдельных триггеров.

0 голосов
/ 18 июня 2009

Я бы порекомендовал одну работу и один триггер. Поместите запросы электронной почты в таблицу базы данных и попросите кварцевую работу искать новые электронные письма для отправки.

0 голосов
/ 05 ноября 2008

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

Вы могли бы даже поставить в очередь задание Quartz электронные письма для сбора и отправки работникам.

Я бы не рекомендовал тысячи заданий / триггеров Quartz - это просто не предназначение инструмента (IMHO).


РЕДАКТИРОВАТЬ: В ответ на комментарий ниже:

Я бы не рекомендовал тысячи заданий / триггеров Quartz, когда они используются как часть среды, выполняющей приложение в той же JVM. Задания / триггеры будут конкурировать за ресурсы с остальным приложением.

...