Планирование задачи на определенное время в Java - PullRequest
0 голосов
/ 12 мая 2019

У меня есть некоторое выполнение кода, которое запланирует много заданий в разное время.Таким образом, в целом у меня будет много заданий для выполнения в определенное время.Я знаю, что есть Spring Scheduler, который будет выполнять задание в какой-то период времени, но он не распределяет задание динамически.Я могу использовать ActiveMQ с доставкой по времени или Quartz для своих целей, но ищу небольшое предложение.Должен ли я использовать Quartz или ActiveMQ по времени / с задержкой доставки или что-то еще.

Существует и другая альтернатива в службе Executor с синхронизированным выполнением, но если приложение перезапустится, то, я полагаю, работа исчезнет.Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 12 мая 2019

Несмотря на то, что вы можете планировать доставку сообщений в ActiveMQ, он не предназначен для использования в качестве планировщика заданий, тогда как именно для этого был разработан Quartz.

В одном из ваших комментариев вы говорили о необходимости «масштабируемого решения», и ActiveMQ плохо масштабируется с огромным количеством запланированных заданий, потому что чем больше сообщений накапливается в очередях, тем хуже оно будет работать, поскольку онов конечном итоге придется печатать эти сообщения на диске, а не хранить их в памяти.ActiveMQ, как и большинство брокеров сообщений, предназначался для хранения сообщений в течение относительно короткого промежутка времени до их использования.Это сильно отличается от базы данных, которая лучше подходит для этого варианта использования.По этой причине Quartz должен масштабироваться лучше, чем ActiveMQ, для большого количества заданий.

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

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

0 голосов
/ 12 мая 2019

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

...