@rumasterov

Какую архитектуру выбрать для запуска парсеров по расписанию в параллельном режиме?

Раздумываю над парсингом информации с разных сайтов. Для каждого сайта существует свой парсер где описана логика парсинга. Разные парсеры нужно запускать в разное время.

Каким образом реализовать запуск этих парсеров по расписанию в параллельном режиме?

У меня пока следующие идеи:
С помощью Spring TaskScheduler создать планировщик для группы парсеров которые нужно запускать каждые 10 минут, другой планировщий для группы парсеров которые нужно запускать каждую минуту и т.д.

Внутри планировщика создавать задания и складывать их в очередь Redis или RabbitMQ, worker будет ее забирать, запускать на основе переданных аргументов нужный парсер и парсить.

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

Может кто-то сталкивался с подобными задачами? Мне расписывать детально не нужно, хотя бы приблизительно намекните куда копать и в правильном я вообще направлении думаю?

Заранее спасибо.
  • Вопрос задан
  • 279 просмотров
Пригласить эксперта
Ответы на вопрос 2
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Посмотрите на https://zookeeper.apache.org , похоже, как раз под вашу задачу с координацией действий.
Ответ написан
Комментировать
@sirs
А Вам точно нужен планировщик и очередь? Почему бы просто не создать набор парсеров, каждый из которых будет запускаться по cron.
Как варианты посмотрите
1) quartz, тут и тут хороший пример
2) ScheduledExecutorService
3) TimerTask
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы