Весеннее планирование Кварц и тысячи рабочих мест

alexanoid спросил: 12 мая 2018 в 04:57 в: spring

Согласно бизнес-логике моего приложения Spring Boot с Quartz Scheduling и MongoDB как постоянное хранилище Job, каждый пользователь системы может создать отложенное задание, которое должно быть выполнено в определенный момент времени. Пользователь выбирает время, когда оно должно быть выполнено.

Сейчас я думаю о подходе, где каждый пользователь будет создавать выделенный JobDetail для каждой отложенной работы, что-то вроде этого:

schedulerFactoryBean.getScheduler().addJob(jobDetail(), true, true);

Проблема, которую я могу увидеть здесь, что при таком подходе я могу быстро создать тысячи заданий в планировщике Quartz. Раньше я никогда не планировал такое количество заданий в Spring Scheduling with Quartz и не знал, как система справится с этим. Это хорошая идея реализовать систему таким образом и будет ли Spring Scheduling Quartz обрабатывать такое количество заданий без проблем?

1 ответ

Есть решение
Jan Moravec ответил: 13 мая 2018 в 10:45

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

Если у вас будет много заданий, выполняемых одновременно, просто убедитесь, что вы настроили Quartz с достаточным количеством рабочих потоков , Количество рабочих потоков должно быть обычно равным максимальному количеству заданий, которые могут выполняться одновременно + небольшой буфер (10% или около того) на всякий случай.

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

Я надеюсь, что это поможет. Если нет, пожалуйста, спросите.

alexanoid ответил: 13 мая 2018 в 11:04
Спасибо за Ваш ответ ! Я собираюсь одновременно работать одновременно с одноразовыми работами и работами с CronTrigger и CronExpression. Не могли бы вы рассказать мне, какое именно свойство следует использовать для настройки количества рабочих потоков? Это что-то вроде org.quartz.threadPool.threadCount? Благодаря!
Jan Moravec ответил: 13 мая 2018 в 06:36
Точно, вы прибили его. См. Quartz-scheduler.org/documentation/quartz-2.x/configuration/....