Какую архитектуру выбрать для запуска парсеров по расписанию в параллельном режиме?
Раздумываю над парсингом информации с разных сайтов. Для каждого сайта существует свой парсер где описана логика парсинга. Разные парсеры нужно запускать в разное время.
Каким образом реализовать запуск этих парсеров по расписанию в параллельном режиме?
У меня пока следующие идеи:
С помощью Spring TaskScheduler создать планировщик для группы парсеров которые нужно запускать каждые 10 минут, другой планировщий для группы парсеров которые нужно запускать каждую минуту и т.д.
Внутри планировщика создавать задания и складывать их в очередь Redis или RabbitMQ, worker будет ее забирать, запускать на основе переданных аргументов нужный парсер и парсить.
Но здесь возникает вопрос, что будет если планировщик создаст новое задание для Парсинга сайта №1, когда еще предыдущее в процессе? Мне бы не хотелось чтобы очередь выстраивалась, т.е. если Парсинг сайта №1 еще работает, то задание для Парсинга сайта №1 добавлять не нужно. Как это можно решить? Пока в голову приходит только в базе данных держать таблицу с заданиями и статусом и перед добавлением проверять есть ли в процессе уже подобная задача. Но мне кажется есть более умные решения.
Может кто-то сталкивался с подобными задачами? Мне расписывать детально не нужно, хотя бы приблизительно намекните куда копать и в правильном я вообще направлении думаю?
А Вам точно нужен планировщик и очередь? Почему бы просто не создать набор парсеров, каждый из которых будет запускаться по cron.
Как варианты посмотрите
1) quartz, тут и тут хороший пример
2) ScheduledExecutorService
3) TimerTask