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

StackOverflow https://stackoverflow.com/questions/264191

Вопрос

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

<Ол>
  • Создайте новую работу и запускайте ее каждый раз, когда запланировано электронное письмо ИЛИ
  • Создайте отдельное задание и создайте новый триггер каждый раз при планировании электронной почты
  • Мне нужно передать сообщение / получателя и т. д. в любом случае, и я не уверен, начнёт ли создание кучи заданий добавлять значительные накладные расходы памяти, поскольку вполне возможно, что будут запланированы тысячи писем.

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

    Это было полезно?

    Решение

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

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

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

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

    Другие советы

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

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

    Можно даже поставить в очередь задание Quartz на электронную почту для сбора и отправки коллекции работников.

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

    <Ч>

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top